unlessの使い所

RubyにもPerlと同様にunless文がある.unless文では与えられた条件式が偽の場合のみ処理が実行される.if not 条件式と書くよりも「偽の場合に実行する」という意図をより明確にできるという理由で積極的に使っている人もいるかもしれない.

しかし,このunless文は乱用するとコードが読み辛くなるという問題がある.他のif文やelse文,論理演算と混ざった場合は特に直感的な理解が難しくなる.

unless x && x > 3
  # いつ実行される?
else
  # ???
end

そのため,通常の条件分岐ではunless文を使わず素直にif文に統一するべきだと思う.

しかし,以下のように例外をraiseするための文(ガード文)の条件式にのみ後置unless修飾子を使うというコーディングスタイルはしばしば見かける.この例は初めてのRubyにも載っている.

raise Exception unless (通常は真であることが期待される条件式)

このように,ガード文だけにunless修飾子を用いることによって「例外処理」と「通常は真であるはずの条件」を強調するという方法はアリだと思う.

まあ,この使い方でもどの条件で例外が発生するのか混乱しそうだと思うならば,素直にif修飾子のみを使った方がいいだろう.

raise Exception if (例外を投げる条件の式)