仕事などで人の書いたRubyのコードを見ていると、以下のようなコードを見かけることがあると思います。
test ||= 10
p test # => 10
sample = 20
sample ||= 'sample'
p sample # => 20
sample_txt ||= 'sample'
p sample_txt # => "sample"
||=
これは、いわゆる自己代入とググればよく出てくるやつです。
しくみは、変数(test
/ sample
/ sample_txt
)の中身が、
nil
または、false
であれば、||=
の右辺にある値を変数に代入する。
nil
または、false
以外であれば、変数の値をそのまま利用する。
と言う感じです。
test ||= 1
上記のようなコードは、以下のようなコードを見ると理解しやすいかなと思います。
test || (test = 1)
p test # => 1
論理演算子である(||
)は、式全体の真偽が確定した時点で評価された値が戻り値となります。
上記の場合、右辺の変数(test
)はnil
なので、1が評価され、戻り値として返されます。
参考