とある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が代入される。