論理演算子の種類と使い方

関係演算子を使えば簡単な条件判断は可能ですが、「a と bが等しい」且つ「c は dよりも大きい」など条件式を組み合わせた複雑な条件式を記述するには論理演算子を使います。ここでは Ruby で用意されている論理演算子の一覧と、それぞれの使い方について解説します。

(2021 年 06 月 30 日公開 / 2022 年 10 月 20 日更新)

論理演算子の種類

Ruby で用意されている論理演算子の種類は次の通りです。

まずはRubyで用意されている論理演算子の種類を確認します。

演算子記述例意味別の演算子
&&a && baとbが共に真の場合に真and
||a || baかbの少なくとも1つが真の場合に真or
!!aaが真の時に偽、偽の時に真not

&& 演算子及び || 演算子の場合は左辺及び右辺にそれぞれ別の条件式を記述します。そしてそれぞれの条件式が true または false となった時に、全体の式として true となるのか false となるのかを論理演算子によって決定します。

左辺条件式 演算子 右辺条件式

! 演算子の場合は右辺に条件式を記述します。そして条件式が true または false となった時に、全体の式として true となるのか false となるのかを論理演算子によって決定します。

演算子 右辺条件式

論理積の場合は左辺及び右辺がどちらも true となる場合に全体として true を返します。論理和の場合は左辺又は右辺の少なくともどちらか 1 つが true の場合に全体として true を返します。否定は右辺が true なら false を、右辺が false なら trueを返します。

なお Ruby の論理演算子では、左から右へ順に条件式を評価していき、式全体の評価が確定した場合はその時点で残りの評価を行いません。例えば && の場合、左辺が false なら右辺を評価するまでもなく全体は必ず false となるので右辺の評価を行いません。また || の場合、左辺が true なら右辺を評価するまでもなく全体は必ず true となるので右辺の評価を行いません。

それでは一つ一つ確認していきます。

論理積

論理積( AND )は演算子 && の左辺及び右辺の条件式が共に true の場合のみ全体の式の評価が true となります。

左辺条件式 && 右辺条件式

左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

左辺右辺全体の式
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

具体的には次のように使用します。

old = 25
if old < 40 && old > 20 then
  print("年齢は20から40までの間です")
end

上記は左辺の「old < 40」、そして右辺の「old > 20」がどちらも true ですので全体の式「old < 40 && old > 20」も true となります。

もう一つ例を見てみます。

old = 25
pref = "Tokyo"
if old < 40 && pref == "Osaka" then
  print("年齢は40より小さく、出身地は大阪です")
end

上記は左辺の「old < 40」は true ですが、右辺の「pref == "Osaka"」が false ですので全体の式「old < 40 && pref == "Osaka"」は false となります。

また同じ演算を行う and も用意されています。これは && と同じ演算を行いますが優先順位が低くなっています。

論理和

論理和( OR )は演算子 || の左辺及び右辺の少なくともどちらか一つの条件式が true の場合に全体の式の評価が true となります。

左辺条件式 || 右辺条件式

左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

左辺右辺全体の式
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

具体的には次のように使用します。

old = 25
pref = "Tokyo"
if old > 30 || pref == "Tokyo" then
  print("年齢は30より大きいか、又は出身地が東京です")
end

上記は左辺の「old > 30」は false ですが、右辺の「pref == "Tokyo"」が true ですので全体の式「old > 30 || pref == "Tokyo"」は true となります。

もう一つ例を見てみます。

pref = "Tokyo"
if pref == "Chiba" || pref == "Osaka" then
  print("出身地は千葉か大阪です")
end

上記は左辺の「pref == "Chiba"」、そして右辺の「pref == "Osaka"」がどちらも false ですので全体の式「pref == "Chiba" || pref == "Osaka"」も false となります。

また同じ演算を行う or も用意されています。これは || と同じ演算を行いますが優先順位が低くなっています。

否定

否定( NOT )は演算子 ! の右辺の条件式が true の場合に全体の式の評価が false となり、右辺の条件式が false の場合に全体の式の評価が true となります。

! 右辺条件式

右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

右辺全体の式
truefalse
falsetrue

具体的には次のように使用します。

old = 25
if !(old  < 20) then
  print("年齢は20歳以上です")
end

上記は左辺の「old < 20」は false ですので全体の式「!(old < 20)」は true となります。

否定を使う場合には優先順位に気を付ける必要があります。否定を表す演算子 ! は優先順位が高いので括弧を使用しないと意図しない結果となる場合があります。(演算子の優先順位について詳しくは「演算子の優先順位(関係演算子、論理演算子)」を参照されてください)。

また同じ演算を行う not も用意されています。これは ! と同じ演算を行いますが優先順位が低くなっています。

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

old = 25
pref = "Tokyo"

puts("old:" + old.to_s)
puts("pref:" + pref)

if old < 40 && old > 20 then
  puts("年齢は20から40まで間です")
end

if old < 30 || pref == "Tokyo" then
  puts("年齢は30より大きいか、又は出身地が東京です")
end

if old > 40 && pref == "Tokyo" then
  puts("年齢は40より大きく、且つ出身地が東京です")
end

if !(old < 20) then
  puts("年齢は20歳より小さくはありません")
end

下記のように実行して下さい。

論理演算子

-- --

Ruby で用意されている論理演算子の一覧と、それぞれの使い方について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。