tawara's blog

雑記。個人の見解です。

if 文の返り値がnilになるとき

docs.ruby-lang.org

irb(main):001:0> hoge = 'hoge'
=> "hoge"
irb(main):002:0> hoge = 'huga' if hoge.nil?
=> nil

いわゆる後置ifで、条件を満たさなかった場合(上記だとhoge.nil?)にnilが返ってくる。そういう仕様だ。

右辺の条件が成立する時に、左辺の式を評価してその結果を返します。条件が成立しなければ nil を返します。

条件が満たされない場合は、左辺が評価されると思っていた。つまりhogeが評価されて'hoge'が返却されると。 繰り返しの処理のなかで使用していてなんでnilになるのかわからず詰まってしまっていた。

ちなみに、elseのないif文でも同じ処理になる。勉強になった。

irb(main):001:0> hoge = 'hoge'
=> "hoge"
irb(main):002:1* if hoge.nil?
irb(main):003:1*   p 'foo'
irb(main):004:0> end
=> nil
irb(main):005:0> 

(了)