Part10:真偽値

希「シェイクスピアは語る。生きるべきか、死ぬべきか、それが問題や」
海未「いきなり何なのですか?それは・・・」
希「昔読んだ本に書いてあったんよ。ブール型の章の頭に」
海未「その昔がいつなのかは触れないことにしますが・・・」
凜「シェイクスピア、最近読んだにゃ」
海未「!」
希「!」
海未(凜が西洋文学とは、天変地異の前触れでしょうか・・・)
希(本当なら地球が地球が大ピンチなやつやね・・・)
凜「あのねちっこい赤キャスター、凜は大嫌いにゃ!サーヴァントなら拳で語るにゃ!」
希「・・・あー、海未ちゃん、天変地異は免れたで」
海未「何の話か分かりませんが・・・」

希「さて、本題の真偽値についてやけど、真偽という以上はキーワードは2つしかあらへん。truefalseや」
凜「猫でもわかるにゃ」
希「実はこの2つ、そういう名前のアトムなんよ。:true:falseってのが定義してあってな」
海未「ということは、アトムとしても使えるのですか?」
希「使う必要があるかは置いといて、マップやキーワードリストのキーにしたりとかはできるみたいやね」

希「次、この2つを使った論理演算や」

true and true     # true
true and false    # false
true or false     # true
false or false    # false
not true          # false
not false         # true

希「andornotがあって、論理積、論理和、否定。数学で習うやろ?」
凜「ももももちろんにゃ」
希「凜ちゃん・・・素直に言うてもウチは怒らへんで?」
凜「怒る人が隣にいるにゃ~!」
海未「いえ、私は呆れているだけですから」
希「andは両辺ともにtrueならtrue、orは両辺どちらかtrueならtrue、notは単純に逆転や」

希「&&||!ってのもあってな。同じく論理積、論理和、否定で、truefalseが相手ならさっきと同じ結果になる」

true && true     # true
true && false    # false
true || false    # true
false || false   # false
!true            # false
!false           # true

海未「何か違いがあるのですか?truefalseが相手なら、というのは・・・」
希「これは真偽値以外も評価できるんよ。たとえば・・・」

true && "umi"      # "umi"
"umi" && true      # true
false && "umi"     # false
"umi" && false     # false

希「真偽値以外の場合、nil以外は真とみなされる。で、結果が真であれば右辺の値が結果になるみたいや」
海未「ということは、||でも同じことが言えるのでしょうか」

true || "rin"      # true
"rin" || true      # "rin"
false || "rin"     # "rin"
"rin" || false     # "rin"

海未「&&と、少し違うように見えますが」
希「せやね。||の場合、左辺の時点で結果が決まることがあるやろ?左辺が真なら右辺は見なくても結果は真なわけや」
海未「その場合に、左辺の値が結果になる、と。たしかに、そういう動きをしているようです」
希「時々やけど、このテクニックが便利だったりするから、よく覚えておいて損はないで」

希「ほな次は比較演算や」

1 == 1      # true
1 == 2      # false
1 == 1.0    # true
1 === 1.0   # false
1 < 2       # true
1 < 1       # false
1 <= 1      # true
2 > 1       # true
1 > 1       # false
1 >= 1      # true

希「=====は等値、<は未満、<=は以下、>=は以上、>は超過や」
凜「=====って何が違うの?」
希「1と1.0があったとして、数学的には同じ1やん?」
凜「そのくらいは凜でもわかるにゃ」
希「==は、数学で言うところの同じ値だったら真になる演算子や。で、===はっていうと、1と1.0って型が違うやん?」
凜「integerとfloatにゃ」
希「よくできました。===は型まで合ってないと真にならないんよ。==より厳密な比較やね」
海未「数値以外は比較できるのですか?」
希「基本は同じや」

"rin" == "rin"                 # true
"rin" === "rin"                # true
"Super LOVE" == "Super LIVE"   # false
"rin" < "umi"                  # true
"rin" > "umi"                  # false

凜「3行目が血も涙もないにゃ」
海未「あれを書いたときは、よし上手いこと言った、とか密かに思っていたのですが・・・」
希「畑神様への信心が足らんのや。まあともかく、文字列比較する分には=====は同じと考えてよさそうや。調べた範囲では、やけど」
凜「凜と海未ちゃんの比較がよくわからないんだけど・・・」
希「あー、それは文字コード順やね。rよりuが大きいから"rin" < "umi"が真になるんや」
凜「よかった~。胸の順だったらどうしようかと思ったよ~」
海未「どんな処理系ですか・・・」
希「そんな75も76も大して変わらn」
凜「ドムは黙るにゃ!!」
海未「私たちの需要のある層にはその僅かな差こそが重要なのです!!」
希「お、おう・・・」

希「次回パターンマッチングやけど、凛ちゃん、いける?」
凛「うん!頑張って調べてくる!」
希「Elixirはじめ関数型言語では重要な概念や。よろしくな」


LINEで送る
Pocket


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">