「and」「or」「not」の優先順位は低い(Ruby)

Ruby
Image from Gyazo

!」で最初に否定され、つぎに「||」で評価→true
||」で最初にtrueと評価され、つぎにその評価を「not」で反転→false

つまり、演算子の優先順としては、

! > || > not

である。

 

Image from Gyazo

つぎに、これを考えてみる。

 

004>の段が意味するところは、||」よりも「&&」のほうが適用される順番が早いということだ。

まず、「&&」でfalseが決まり、「||」でtrueとなる。

 

005>の段が意味するところは、and」と「or」は適用される順が同等なため、通常通りに左から順に評価される、ということだ。

まず、「or」でtrueが決まり、「and」でfalseとなる。

 

なぜtrueとfalseが「and」で結ばれるとfalseになるかは省略する。というのも、その問いは、プログラミングというよりも論理学で扱われる問いであるからだ。

 

Image from Gyazo Image from Gyazo

||」だとエラーに。

 

Image from Gyazo Image from Gyazo

or」だとオッケー。

 

なぜだ・・・??

 

ヒント↓

Image from Gyazo Image from Gyazo

カッコでくくるとセーフ!!

 

どうやら、式中に「||」があると、まず「||」周辺の、スペースがないひとつづきの2値を処理し、その後右へと評価が進んでいくようだ。

しかし、or」だとそんなに”出しゃばり”な演算子ではないから、きちんとおとなしく左から評価されるのを待って、あとは右側へと評価がされるようだ。

結果的に、スペースが空いていても連続していればひとかたまりになっているのだ。

 

今回使用した本