論理演算子の種類と使い方
関係演算子を使えば簡単な条件判断は可能ですが、「a と bが等しい」且つ「c は dよりも大きい」など条件式を組み合わせた複雑な条件式を記述するには論理演算子を使います。ここでは Ruby で用意されている論理演算子の一覧と、それぞれの使い方について解説します。
(Last modified: )
論理演算子の種類
Ruby
で用意されている論理演算子の種類は次の通りです。
まずはRubyで用意されている論理演算子の種類を確認します。
演算子 | 記述例 | 意味 | 別の演算子 |
---|---|---|---|
&& | a && b | aとbが共に真の場合に真 | and |
|| | a || b | aかbの少なくとも1つが真の場合に真 | or |
! | !a | aが真の時に偽、偽の時に真 | not |
&&
演算子及び ||
演算子の場合は左辺及び右辺にそれぞれ別の条件式を記述します。そしてそれぞれの条件式が true
または false
となった時に、全体の式として true
となるのか false
となるのかを論理演算子によって決定します。
左辺条件式 演算子 右辺条件式
!
演算子の場合は右辺に条件式を記述します。そして条件式が true
または false
となった時に、全体の式として true
となるのか false
となるのかを論理演算子によって決定します。
演算子 右辺条件式
論理積の場合は左辺及び右辺がどちらも true
となる場合に全体として true
を返します。論理和の場合は左辺又は右辺の少なくともどちらか 1 つが true
の場合に全体として true
を返します。否定は右辺が true
なら false
を、右辺が false
なら true
を返します。
なお Ruby
の論理演算子では、左から右へ順に条件式を評価していき、式全体の評価が確定した場合はその時点で残りの評価を行いません。例えば &&
の場合、左辺が false
なら右辺を評価するまでもなく全体は必ず false
となるので右辺の評価を行いません。また ||
の場合、左辺が true
となるので右辺の評価を行いません。
それでは一つ一つ確認していきます。
論理積
論理積( AND
)は演算子 &&
の左辺及び右辺の条件式が共に true
の場合のみ全体の式の評価が true
となります。
左辺条件式 && 右辺条件式
左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
左辺 | 右辺 | 全体の式 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
具体的には次のように使用します。
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
となります。
左辺条件式 || 右辺条件式
左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
左辺 | 右辺 | 全体の式 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
具体的には次のように使用します。
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
となります。
! 右辺条件式
右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
右辺 | 全体の式 |
---|---|
true | false |
false | true |
具体的には次のように使用します。
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 )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。