2021-08-18

手短に済まないのか

プログラミング基本的手法の1つに、論理演算というものがある。

これは真偽値(真=true、偽=false)同士の組み合わせを評価し、結果をtrue/falseで返すというものだ。

この演算のための演算子の代表的ものがANDとORで、それぞれ論理積論理和という。

式aとbにtrue/falseのいずれかが定義されているとして、

a AND bだったらaとb両方がtrueときのみ、演算結果がtrueになり、

a OR bだったらaとbいずれかがtrueであれば、演算結果がtrueになる。


ということは、

ANDの場合は左辺の式がfalseの時点で、右辺を評価するまでもなく演算結果はfalseとなり、

ORの場合は左辺の式がtrueの時点で、右辺を評価するまでもなく演算結果はtrueとなる。

これを短絡評価といい、今どきのプログラミング言語では必ずこの仕掛けが実装されていると。


この他に、XORという演算子がある。

これは排他的論理和といい、演算子の右辺と左辺の結果が違う組み合わせの場合のみtrueとなる。

まりa=trueかつb=false場合か、a=falseかつb=true場合のみ、演算結果(a XOR b)がtrueとなる。


問題は、どういうわけかこのXORには短絡評価存在しないのだ。

どのプログラミング言語を調べても短絡評価がないので、かなり驚いている。

一体どういうこと?


(追記)

トラバがやかましいから言っとくけど、bool型XOR比較できる仕組みのある言語限定の話な。

  • XORには 左辺の式がxxの時点で、右辺を評価するまでもなく演算結果はyyとなる。 ってパターンが無くて、必ず両辺を調べないと演算結果がわからないから

  • ANDの場合は左辺の式がfalseの時点で、右辺を評価するまでもなく演算結果はfalseとなり、 ORの場合は左辺の式がtrueの時点で、右辺を評価するまでもなく演算結果はtrueとなる。 なんか勘...

    • どういう勘違いをしていると想定したのかがわからん

      • ANDの場合は左辺の式がfalseの時点で、右辺を評価するまでもなく演算結果はfalseとなり、 ORの場合は左辺の式がtrueの時点で、右辺を評価するまでもなく演算結果はtrueとなる。 これ自体...

        • これは言語仕様レベルできっちり定義されていて 「無駄だけど一応右辺も評価しとくか」っていうコンパイラがあったら明確に仕様違反だよ

          • 具体的な言語は指定されてないんだから「右辺も評価する言語」を想定したっていいだろう

          • 今テメー、短絡評価の無いVB6.0さんをディスったな?

            • それはVB6さんの言語仕様で「短絡評価はしない」と決まってるんやろ メンテナの気分で「バージョンアップついでに短絡評価入れてみました」なんてならんかったやろ

  • 頭悪すぎるだろ

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん