【揺花草子。】<その2606:ロジカルシンキング。>
【揺花草子。】<その2606:ロジカルシンキング。>
Bさん「論理演算子には優先順位が厳密に定められていますね。」
Aさん「んっ・・・ん?」
Cさん「阿部さんまさか論理演算子って何とか言わないわよね?」
Aさん「いやもちろんわかってますよ?
&& とか || とかですよね?」
Bさん「ちゃんと解ってるじゃない。」
Aさん「やっぱりそう言う話なんだ・・・」
Bさん「論理演算子に限らず、四則演算子でも何でも
演算子には優先順位が決められている。
小学生の算数で言えば 1 + 2 * 3 は 9 ではなく 7 だよ、
足し算引き算より掛け算割り算が優先だよと教えられるね。」
Aさん「そうだね。」
Cさん「掛け算は何よりも優先で尊いと言う事ね。」
Aさん「あなたの言ってる掛け算は違う掛け算でしょう。
尊いとかじゃないですからね。」
Bさん「同じように、プログラミングの世界では様々な演算子があり、
それ毎に優先順位が決まっている。
例えば
let a = 5;
let b = 10;
let c = a++ * ++b;
ていうプログラムがあったとしたら、答えは 66 になるよね。」
Aさん「うん・・・インクリメント・デクリメント演算子は
前置か後置で評価タイミングが変わるって言うあれだね。」
Bさん「で、件の論理演算子ですよ。」
Aさん「はぁ。」
Cさん「言語によってどういう記号になるかは異なるわよね。
条件の結合、いわゆる論理 AND と言う意味では
多くの言語で「&&」が用いられると思うけれども、
SQL なんかだとそのまま「AND」よね。」
Aさん「確かに。」
Bさん「同様に論理 OR は「||」と書いたりそのまま「OR」だったりする。」
Aさん「はい。」
Bさん「そして論理 AND と論理 OR では、前者の方が優先だと言うのも基本ルールです。」
Aさん「そうだね。」
Cさん「let a = true;
let b = false;
let c = false;
だった場合、
let d = a || b && c;
だとしたら d は true よね。
これは「&&」の方が「||」よりも優先するからだわ。」
Bさん「仮にこれが
let d = (a || b) && c;
だとしたら d は false になる。
カッコによって優先順位が変わったからだ。」
Aさん「うん。」
Bさん「そうなると、ですよ。」
Aさん「え?」
Bさん「『Earth, Wind AND Fire OR Die』は
『大地と風、および、炎もしくは死のどちらか』ではなくて
『大地と風および炎、もしくは死』となるし
『Simon And Garfunkle Or Die』は
『サイモン氏、およびガーファンクル氏もしくは死』でなく
『サイモン氏およびガーファンクル氏、もしくは死』
となるよね。」
Aさん「『Or Die』の必要性!!!!!」
プログラマ泣かせ。




