多くの人がスクリプト言語で以下の表記法を使用していますが、私はそれがどのように機能するのかよくわかりません。
~$ false || echo "aa"
aa
~$ true || echo "aa"
~$ true && echo "aa"
aa
~$ false && echo "aa"
~$
両側が最初に実行され、次に戻り値が評価されますか?
これらを書くためのより簡単な方法は何でしょうか?
ですか?||
_XOR
多くの人がスクリプト言語で以下の表記法を使用していますが、私はそれがどのように機能するのかよくわかりません。
~$ false || echo "aa"
aa
~$ true || echo "aa"
~$ true && echo "aa"
aa
~$ false && echo "aa"
~$
両側が最初に実行され、次に戻り値が評価されますか?
これらを書くためのより簡単な方法は何でしょうか?
ですか?||
_XOR
これはとても簡単だと思います。
毎回左側が最初に評価され、必要に応じて右側が評価されます。
前者の場合、LHSはfalse
であるため、式の結果は演算であるためRHSに依存しOR
ます。したがって、右側が評価/実行されます。
2番目のケースでは、LHSはであり、操作true
の結果はRHSに何があるかに関係なく、RHSが評価/実行されることはありません。OR
true
操作でも同じことが起こりAND
ます。LHSがtrue
3番目のステートメントの場合にのみ、RHSを評価する必要があります。
&&
andを使用し||
て評価を制御することは、プログラミングにおいて非常に基本的なことです。多くの人がすでに答えているように、彼らは「短絡評価」を使用しています。一部の言語では、および と
同じですが、すべてではありません。たとえばRubyでは、まったく同じ意味ではありません(私が知っているように)。and
or
これらを書くためのより簡単な方法は何でしょうか?
&&
and||
の代わりに使用することは怠惰なプログラミングであると言えますが、 and構造を使用することが最も簡単であるif ... else
と言う人もいます。&&
||
別の方法(またはこれをよりよく理解する方法)がある場合:
expr && echo "aa"
# is the same as
if expr; then
echo "aa"
fi
と
expr || echo "aa"
# is the same as
if ! expr; then
echo "aa"
fi
と
expr && echo "yes" || echo "no"
# is the same as
if expr; then
echo "yes"
else
echo "no"
fi
そしてもちろんミックス
if this && that; then
echo "yes"
else
echo "no"
fi
「短絡評価」は非常に重要なルールであり、状況によってはコードがこれに依存しています。
この例 (VIM からのものですが、多くの言語で同じです) では、動作しない場合に例外が発生します。
if exists("variable") && variable == 3 ...
結果を決定する前に両側が評価された場合、variable
定義されていない場合は例外になります。
&&
たとえば、結果が得られる前に両側が評価されるような設計の悪い言語がいくつかありました。
そう:
if you like it; then
use it && be happy
else
use it || be happy
fi
これは短絡評価と呼ばれます。
||
OR です (XOR ではありません)。
スクリプト (ソース コードと同様) では、右側は必要な場合にのみ評価されます。
with ||
the RHS は、LHS が false または 0 と評価された場合に評価されます。 With &&
the RHS は、LHS が true と評価された場合にのみ評価されます。
|| それは本当だからです || すべてが常に true であるため、RHS を評価する必要はありません。false && 何でも常に false です。
短絡評価を使用する利点も参照してください。
||
&&
あなたがリストしたすべての言語で怠惰です。
その仕組みは、式が左から右に評価されるというものです。の場合、||
式全体の値は "false-y" ではない最初の引数の値 (または、すべての引数が false-y の場合は最後の引数) が式の値になります。