Just do IT

思うは招く

Rubyで見た「||=」の正体

とあるRubyソースコードを見ていて、「||=」といった謎の演算子が出てきた。

なんだこりゃ??

||= は通称「nilガード」

調べてみると、どうやら変数を初期化したいときに使われる演算子で、Ruby界隈では「nilガード」と呼ばれているらしい。

たとえば、pryを開いてfooと打ってみる。

pry(main)> foo
NameError: undefined local variable or method `foo' for main:Object
from (pry):1:in `__pry__'

「変数fooはなーんにも定義されてねぇよ」と返ってくる。

そしてnilガードを使ってみる。

pry(main)> foo ||= 'hoge'
=> "hoge"

みごとにhogeが代入された。

つまり、「||の左辺が偽であるなら、右辺を代入する」という意味になる。左辺が真だったら何もせず、偽だったら右辺を代入する。

この場合、fooには何も定義していないので偽である。よって、hogeが代入される。

感謝の参照

qiita.com

www.xmisao.com