真偽値について

・Exercise28:真偽値について

前回のエクササイズから学んだ論理の組み合わせは、ブール論理演算と呼ばれます。
ブール論理はプログラミングにおいてあらゆるところで使われており、計算の基礎に当たります。

このエクササイズでは、覚えた論理式を実際にRubyの中で使っていきます。
それぞれの問題を見て、その答えを書いてみてください。
答えはtrueもしくはfalseのどちらかになります。
答えを記入したら、それぞれ合っているかどうかターミナル上でRubyを起動して確かめてみてください。

  1. true && true ⇨ true
  2. false && true ⇨ false
  3. 1 == 1 && 2 == 1 ⇨ false
  4. “test” == “test” ⇨ true
  5. 1 == 1 || 2 != 1 ⇨ true
  6. true && 1 == 1 ⇨ true
  7. false && 0 != 0 ⇨ false
  8. true || 1 == 1 ⇨ true
  9. “test” == “testing” ⇨false
  10. 1 != 0 && 2 == 1 ⇨ false
  11. “test” != “testing” ⇨ true
  12. “test” == 1 ⇨ false
  13. !(true && false) ⇨ true
  14. !(1 == 1 && 0 != 1) ⇨ false
  15. !(10 == 1 || 1000 == 1000) ⇨ false
  16. !(1 != 10 || 3 == 4) ⇨ false
  17. !(“testing” == “testing” && “Zed” == “Cool Guy”) ⇨ true
  18. 1 == 1 && (!(“testing” == 1 || 1 == 0)) ⇨ true
  19. “chunky” == “bacon” && (!(3 == 4 || 3 == 3)) ⇨ false
  20. 3 == 3 && (!(“testing” == “testing” || “Ruby” == “Fun”)) ⇨ false

ブール論理を見た際に、以下のことを念頭に入れておけば簡単に解くことができます。

  1. “==”もしくは”!=”を見つけた場合、それをその真偽と入れ替える。
  2. 丸括弧()の中に”&&/||”を見つけた場合、そこを先に解く。
  3. “!”を見つけた場合は、その内容を逆に置き換える。
  4. 残りの”&&/||”を見つけた場合、そこを解く。
  5. そこまで終われば、trueかfalseかわかるはず。

このことを念頭に置いて、20番を一緒に解いてみましょう。

3 != 4 && !("testing" != "test" || "Ruby" == "Ruby")
  1. イコールテストを行う。

3 != 4 IS TRUE: TRUE && !(“TESTING” != “TEST” || “RUBY” == “RUBY”)

“TESTING” != “TEST” IS TRUE: TRUE && !(TRUE || “RUBY” == “RUBY”)

“RUBY” == “RUBY”: TRUE && !(TRUE || TRUE)

2. 丸括弧()の中に”&&/||”を見つける。

(TRUE || TRUE) IS TRUE: TRUE && !(TRUE)

3. “!”を見つけた場合は、その内容を逆に置き換える。

!(TRUE) IS FALSE: TRUE && FALSE

4. 残りの”&&/||”を見つけてそれを解く。

TRUE && FALSE IS FALSE

これで終了で、答えがfalseとわかります。

出力結果について

Ruby上で実行すると、以下のようになると思います。

学習ドリル

  1. Rubyには他にも、“!=”や”==”に似たようなものがたくさんあります。これらの等号演算子を、できるだけ多く見つけてください。例えば、”<”や”<=”のようなものです。
  2. それぞれの等号演算子の名前もしくは意味を書いてください。例えば”!=”なら、”not equal”といった感じです。
  3. それら新たなブール論理値を使い、Ruby上で論理式を使って遊んでみてください。勿論実行する前に、自分で答えを考えてみましょう。

学習ドリルの答え

1 & 2. 見つけた等号演算子とその意味は、以下のようになります。

<= :値がそれ以下ならtrue

>= :値がそれ以上ならtrue

<=> :「左辺 < 右辺」であれば-1を、「左辺 > 右辺」であれば1を、等しければ0を返す

== :同じならtrue

=== :同じならtrue

!= :等しくなければtrue

=~ :正規表現、指定文字列があればtrue

!~ :正規表現、指定文字列がなければtrue

3. 以下のように適当に論理式を作成して実行してみました。