😊

【Ruby】unlessは脳内変換が必要なので出来ればifを使いたい

に公開

例えば簡単だけど以下のようなケース。

# todo.done?がfalseとする
unless todo.done?
  puts 'Not done'
else
  puts 'Done'
end
#=> 'Not done'

todo.done?はfalseなので、unless todo.done?が評価され、puts 'Not done'が実行される。

しかし、個人的にunlessはどうも脳内変換が必要で思考が一瞬止まる感じがあって苦手だ。よって以下のように書きたい。

# todo.done?がfalseとする
if todo.done?
  puts 'Done'
else
  puts 'Not done'
end
#=> 'Not done'

こっちのほうが思考の流れに沿って理解しやすい。
そもそもunlessは後置unlessで使われることが多いイメージ。個人的には、どうしてもunlessが必要なとき以外はあまり書かないようにしている。

と思ったらすでにいろいろ議論があるみたい。
https://techracho.bpsinc.jp/hachi8833/2018_06_01/56980

Discussion