希「シェイクスピアは語る。生きるべきか、死ぬべきか、それが問題や」
海未「いきなり何なのですか?それは・・・」
希「昔読んだ本に書いてあったんよ。ブール型の章の頭に」
海未「その昔がいつなのかは触れないことにしますが・・・」
凜「シェイクスピア、最近読んだにゃ」
海未「!」
希「!」
海未(凜が西洋文学とは、天変地異の前触れでしょうか・・・)
希(本当なら地球が地球が大ピンチなやつやね・・・)
凜「あのねちっこい赤キャスター、凜は大嫌いにゃ!サーヴァントなら拳で語るにゃ!」
希「・・・あー、海未ちゃん、天変地異は免れたで」
海未「何の話か分かりませんが・・・」
希「さて、本題の真偽値についてやけど、真偽という以上はキーワードは2つしかあらへん。true
とfalse
や」
凜「猫でもわかるにゃ」
希「実はこの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
希「and
とor
とnot
があって、論理積、論理和、否定。数学で習うやろ?」
凜「ももももちろんにゃ」
希「凜ちゃん・・・素直に言うてもウチは怒らへんで?」
凜「怒る人が隣にいるにゃ~!」
海未「いえ、私は呆れているだけですから」
希「and
は両辺ともにtrueならtrue、or
は両辺どちらかtrueならtrue、not
は単純に逆転や」
希「&&
、||
、!
ってのもあってな。同じく論理積、論理和、否定で、true
とfalse
が相手ならさっきと同じ結果になる」
true && true # true
true && false # false
true || false # true
false || false # false
!true # false
!false # true
海未「何か違いがあるのですか?true
とfalse
が相手なら、というのは・・・」
希「これは真偽値以外も評価できるんよ。たとえば・・・」
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はじめ関数型言語では重要な概念や。よろしくな」