Rails

【Rails】条件付き代入演算子||=と&&=の挙動について

Rails

 

今回は条件付き代入演算子である||=&&=の挙動について簡単にまとめてみました。これらはRailsプロジェクトでよく見かけるコードですが、曖昧な理解だったので今回を機に改めて調べてまとめてみました。

||=

「a ||= b」はaが未定義またはfalse/nilの場合、bがaに代入される演算子になります。また「a ||= b」は「a || a = b」の省略形になります。

変数xが未定義の場合

x ||= "Hello!"

> x
=> Hello!

変数xがfalseの場合

x = false
x ||= "Hello!"

> x
=> Hello!

変数xがnilの場合

x = nil
x ||= "Hello!"

> x
=> Hello!

変数xがtrueの場合

x = true
x ||= "Hello!"

> x
=> true

変数xが1の場合

x = 1
x ||= "Hello!"

> x
=> 1
1は真とみなされるため、Hello!の代入は行われません。

変数xが0の場合

x = 0
x ||= "Hello!"

> x
=> 0
0も真とみなされるため、Hello!の代入は行われません。

&&=

「a &&= b」はaが未定義またはfalse/nilでない場合、bがaに代入される演算子になります。また「a &&= b」は「a && a = b」の省略形になります。

変数xが未定義の場合

x &&= "Hello!"

> x
=> nil

変数xがfalseの場合

x = false
x &&= "Hello!"

> x
=> false

変数xがnilの場合

x = nil
x &&= "Hello!"

> x
=> nil

変数xがtrueの場合

x = true
x &&= "Hello!"

> x
=> Hello!

変数xが1の場合

x = 1
x &&= "Hello!"

> x
=> Hello!
1は真とみなされるため、Hello!の代入は行われません。

変数xが0の場合

x = 0
x &&= "Hello!"

> x
=> Hello!
0も真とみなされるため、Hello!の代入は行われません。

まとめ

  • 「a ||= b」はaが未定義またはfalse/nilの場合にbがaに代入される
  • 「a ||= b」は「a || a = b」の省略形
  • 「a &&= b」はaが未定義またはfalse/nilでない場合にbがaに代入される
  • 「a &&= b」は「a && a = b」の省略形

参考

||= and &&= Special Cases in Conditional Assignment Operators

 

 

今回は条件付き代入演算子である||=&&=の挙動についてまとめてみました。||=と&&=の違いをざっくりまとめると、左辺が未定義(false/nil)の場合に代入するかしないかという感じですかね。