unlessを用いた複数条件の対象範囲
ifと比較すると直感的に対象範囲がわかりにくい。
ビジュアルで理解できるよう、ベン図を使って解説する。
&&(かつ)を使用する場合
以下のコードで考える。
a = 1 b = 1 unless a == 1 && b == 1 puts "ベン図の重なっている部分以外" else puts "aは1であり、かつbは1です。" end
unless a == 1 && b == 1
という場合、対象範囲は「"a = 1 かつ b = 1"ではない部分」である。
ベン図では「色が重なっている部分以外」を指す。
下図では対象範囲を灰色で塗りつぶしている。
(ベン図の画像は電子のかなたで消失しました)
||(または)を使用する場合
以下のコードで考える。
a = 1 b = 1 unless a == 1 || b == 1 puts "ベン図の白い部分" else puts "aは1であり、かつbは1です。" end
unless a == 1 || b == 1
という場合、対象範囲は「a = 1 でも b = 1でもない部分」である。
ベン図では「色が塗られていない白い領域」を指す。
(ベン図の画像は電子のかなたでロストパージしました)
ifとの使い分け
今回は「aが1である」という単調な条件であった。
1つの条件、または単純な数値比較であればunlessを使えばよいだろう。
一方、「ログインしているか」、「対象にフラグが立っているか」などの複数の条件を付ける場合は、ifを使用したほうが良い。
第三者が見ても直感的に理解できる記述を心がけよう。