業務で少しハマったことをTwitterでつぶやいてみました。
def greeting(flag)
— ゆうすけ@Railsエンジニア (@ysk_pro) November 19, 2019
'Good evening'
'Good night' if flag
end
p greeting(false) # -> ?
割とバラけていますね。
flag が true であればもちろん Good night が答えになるのですが、これはどうなるでしょうか
(↓に答え)
答えはそれ以外で「nil」になります。
それ以外を選ばれた方、さすがでした!(nil を選択肢に入れなかったのがちょっと卑怯だったかも)
後置if で false になる時の返り値についてはドキュメントに記載がありました。
右辺の条件が成立する時に、左辺の式を評価してその結果を返します。 条件が成立しなければ nil を返します。
制御構造 (Ruby 2.6.0) の if 修飾子 の部分です。
なるほど。
また、こちらはどうなるでしょうか。
def greeting(flag) 'Good evening' if flag 'Good night' end end p greeting(false) # -> ?
(↓に答え)
こちらも「nil」になります。
if 節の返り値についても、先ほどと同じドキュメントに記載がありました。
if 式は、条件が成立した節(あるいは else 節)の最後に評価し た式の結果を返します。else 節がなくいずれの条件も成り立たなけれ ば nil を返します。
へぇ、そうなるんだ〜。
これを認識していないと予想外のバグを埋め込んでしまうおそれがあるので注意したいですね。
おわり