ЯoomeR

プログラミング~実装とエラー解決と、時々、AI~

unlessで複数の条件をつける

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を使用したほうが良い。

三者が見ても直感的に理解できる記述を心がけよう。