Rubyのunless+ (|| or &&)文でバグったので、もう使わないと決めた話

f:id:ihatov08:20170312214906p:plain

Rubyのunless+ (|| or &&)文でバグったので、もう使わないと決めた話です。

こちらのコードを日本語にするとどうなるでしょうか?

unless hoge || fuga
puts 'hoge'
end

hogeがfalse または、fugaがfalseだったら、puts ‘hoge’するでしょうか。

答えはこちらです。

[13] pry(main)> puts 'hoge' unless true || true
=> nil
[14] pry(main)> puts 'hoge' unless true || false
=> nil
[15] pry(main)> puts 'hoge' unless false || false
hoge
=> nil
[16] pry(main)> puts 'hoge' unless false || true
=> nil

falseかつfalseのときに’hoge’が出力されます。

unlessで || or && を使用した場合は、この条件演算子も反転するんですね、、

考えれば当たり前のことなのですが、ifと同じ調子で読んでしまうとバグを埋め込んでしまいますね、、

はい、実際に埋め込んでました、、

なので、もうunless hoge && fugaや、unless hoge || fugaなんてコードは書きません。

伊藤さん、いつも素晴らしい記事ありがとうございます!
blog.jnito.com

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です