プログラミングで必須の論理演算子周りの説明をしていきます。
擬似変数とは
「true」「false」「nil」のことを擬似変数といいます。
「true」「false」は主に条件分岐に使用されます。
「nil」は何もないことを表します。
例えばデータベースから、取得してデータが何も入っていない場合は「nil」が返ってきたり、初期値を「nil」で設定したりします。
論理演算子
複数の条件式を繋ぐ際に使うもの「AND演算子」「OR演算子」「NOT演算子」があります。
&&(AND演算子)
「&&(AND演算子)」は左辺と右辺が両方「true」の場合に処理が実行されます。
if (左辺) && (右辺)
左辺と右辺が両方「true」の場合に処理が実行
end
以下の例を見てください。
どちらも「nil」が返っていますが、実は中で処理されている内容が違います。
「&&」はどちらも「true」の場合のみ実行されます。そのためどちらか片方が「false」であれば、どちらにせよ実行されないため以下のコメントのようになります。
# 「&&」の左辺の「false」のみ評価している
[119] pry(main)> true if false && true
=> nil
# 「&&」の左辺の「true」も、右辺の「false」も評価している
[120] pry(main)> true if true && false
=> nil
||(OR演算子)
「||(OR演算子)」は左辺と右辺がどちらか「true」の場合に処理が実行されます。
if (左辺) || (右辺)
左辺と右辺がどちらか「true」の場合に処理が実行
end
以下の例を見てください。
どちらも「true」が返っていますが、実は中で処理されている内容が違います。
「||」は「左辺「右辺」」どちらかもしくは両方「true」の場合のみ実行されます。そのためどちらか片方が「true」であれば、どちらにせよ実行されないため以下のコメントのようになります。
# 「||」の左辺の「true」も、右辺の「false」も評価している
[121] pry(main)> true if false || true
=> true
# 「||」の左辺の「true」のみ評価している
[122] pry(main)> true if true || false
=> true
論理演算子を使って値を代入
Rubyでは「nil」と「false」が「偽」、それ以外は「真」として扱われます。
それを利用して論理演算子を利用して以下のように値を代入することもできます。
以下の例では「val1」がnilで「偽」として扱われ、「val2」は「nil」でも「false」でもないため「真」と扱われるため「val2」が代入されています。
[123] pry(main)> val1 = nil
=> nil
[124] pry(main)> val2 = 100
=> 100
[126] pry(main)> val3 = val1 || val2
=> 100
以下のように記載することでvarが「nil」か「false」の場合だけ値が代入されます。
[127] pry(main)> var = nil
=> nil
[128] pry(main)> var ||= 'value'
=> "value"
[129] pry(main)> var
=> "value"
以下のようにすでに「val」に値が入力されている場合には値が代入されません。
[130] pry(main)> val = 'value'
=> "value"
[131] pry(main)> var ||= 'new value'
=> "value"
[132] pry(main)> val
=> "value"
否定の論理演算子
真偽値を否定、反転させたい場合、「!(エクスクラメーション、ビックリマーク、感嘆符)」を使用します。
以下の例のように「真」「偽」が逆になっていることがわかります。
[133] pry(main)> !true ? '真' : '偽'
=> "偽"
[134] pry(main)> !false ? '真' : '偽'
=> "真"
補足
ちなみに上記で説明した論理演算子は文字でも書くことができます。
- 「&&」 → 「and」
- 「||」 → 「or」
- 「!」 → 「not」
[135] pry(main)> true and true
=> true
[136] pry(main)> true or true
=> true
[137] pry(main)> not true
=> false
コメント