今回は条件付き代入演算子である||=と&&=の挙動について簡単にまとめてみました。これらは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
変数xが0の場合
x = 0
x ||= "Hello!"
> x
=> 0
&&=
「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!
変数xが0の場合
x = 0
x &&= "Hello!"
> x
=> 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)の場合に代入するかしないかという感じですかね。