みるべあのエンジニア日記

勉強したことについてTwitterとガチブログの中間くらいのスタンスで書く日記

Rubyの「&=(アンド・イコール)」って何?

Rubyのコードで見慣れない &= を見て検索してもなかなかヒットしなかったので、
私なりに考えて腑に落ちました。 リファレンスマニュアルに載っているんですけどね。

自己代入

+= -= はプログラミングをある程度やっている方々であれば理解できると思います。

例えば、 x += yx = x + y と等価です。

この考え方を応用すれば、 x &= yx = x & y と等価ですね。

&演算子

&演算子は積集合を求めます。
言い換えると、比較する対象に共通する要素を求めます。

irbを使って検証してみます。

irb(main):001:0> x = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> y = [3, 4, 5]
=> [3, 4, 5]
irb(main):003:0> x & y
=> [3]

ということは、

irb(main):004:0> x &= y
=> [3]
irb(main):005:0> x
=> [3]

となるわけですね。

true と false の積集合

irb(main):001:0> x = true
=> true
irb(main):002:0> y = false
=> false
irb(main):003:0> x &= y
=> false

となりました。

true と nil の積集合

irb(main):001:0> x = true
=> true
irb(main):002:0> y = nil
=> nil
irb(main):003:0> x &= nil
=> false

結果は同じく false となりました。