質問: 論理演算子の&&は、左辺が偽であれば右辺を評価せず、||は、左辺が真であると右辺を評価しません。これは、今まで頂いたご回答に学ばせてもらって遅延評価というくくりの中の短絡評価と呼ぶものです。 ところで、なぜ&&の左辺が「偽」のときに右辺を評価せず、左辺が「真」のときに右辺を評価しない仕様なのでしょうか。逆に&&の左辺が真のときに右辺を評価せず、||の左辺が偽のときに右辺を評価しないという仕様では、ダメなのでしょうか。 何か背景となる根拠があってこのような形になったと思うのですが、いったいなぜこのような仕様なのでしょうか。
回答: > > &&の左辺が真のときに右辺を評価せず、 > > ||の左辺が偽のときに右辺を評価しないという仕様では、 > > ダメなのでしょうか。 > > > それだとダメですね。 AND(&&)は両辺がTrueでTrue、残り3パターンはFalse OR(||)は両辺がFalseでFalse、残り3パターンはTrue ですから、ANDは一方が偽なら偽、ORは一方が真なら真、 と残った辺が真でも偽でもどちらでも真偽値が確定します。 > > なぜ&&の左辺が「偽」のときに右辺を評価せず、 > > 左辺が「真」のときに右辺を評価しない仕様なのでしょうか。 > > > 真偽の逆はダメですが、左右は入れ替え可能です。 &&の右辺が偽のときに左辺を評価しない、 という仕様も(自分で言語を作るなら)可能でしょう。 ただ、自動車が右ハンドルの国と左ハンドルの国があるように、 いったんどっちかに決めたらルールを固定する必要があります。 後はささいな問題ですが、使う側の個人的意見として、 左辺を先に評価するので合ってると思います。 ``` var flag = 'a' //var flag = '' var result = flag || 'b'; print(result); ``` 上は一行目と二行目でコメントアウトを切り替えると、 代入される文字列が切り替わり、条件分岐を実現できます。 このように論理演算子の短絡評価を利用して、 条件文を省略する書き方があります。 (三項演算子と同じで、使うべきかどうかはともかく) このとき、左が先に評価されて 実質的な条件判断になるのは、 if文の「if ( ) { }」と同じ順番なので、 この方が分かりやすいと思います。