スリ飯屋Malankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【Ruby】論理演算子 &&= について

&&=について

||= はよく見るのですが、&&= は業務で初めて見て、??となったので備忘録として残しておきます。

左辺がtrueと見なされる値なら、右辺を評価し、結果を左辺に代入するという挙動をします。

例、

irb(main):002:0> user = 'ユーザーです'
=> "ユーザーです"

irb(main):003:0> user &&= 123
=> 123

# 123が代入され、'userです' が上書きされている
irb(main):004:0> user
=> 123

***

[1] pry(main)> hoge = 'hogeです'
=> "hogeです"

[2] pry(main)> hoge &&= false
=> false

# 右辺のfalseが代入されている
[3] pry(main)> hoge
=> false

***

[4] pry(main)> fuga = 'fugaです'
=> "fugaです"

[5] pry(main)> fuga &&= ''
=> ""

# 左辺の""が代入されている
[6] pry(main)> fuga
=> ""
左辺が falseと見なされる場合かつ、右辺がtrueと見なされる値の場合
irb(main):020:0> hoge = nil
=> nil

irb(main):021:0> hoge &&= 123
=> nil

# 左辺のhogeがnilなので、右辺の123は評価されず、nilが返却される
irb(main):022:0> nil
=> nil

***

[12] pry(main)> foo = false
=> false

[13] pry(main)> foo &&= true
=> false

# こちらも右辺は評価されない
[14] pry(main)> foo
=> false

***

[1] pry(main)> number &&= 123
=> nil

# numberが直前まで未定義の場合でも、エラーとはならず、nilを返す。
[2] pry(main)> number
=> nil
左辺が{}、[]の場合かつ、右辺がtrueと見なされる値の場合
irb(main):014:0> hoge = []
=> []

irb(main):015:0> hoge &&= 123
=> 123

irb(main):016:0> hoge
=> 123

***

irb(main):017:0> hoge = {}
=> {}

irb(main):018:0> hoge &&= 123
=> 123

irb(main):019:0> hoge
=> 123
  • 参考

https://qiita.com/umanoda/items/a8e37b2aff77bbd0a413