開発者が and の代わりに and を使用することを決定したコードベースAND
がOR
あり&&
ます||
。
&&
演算子の優先順位 ( go before ) に違いがあることは知っていますがand
、指定されたフレームワーク (正確にはPrestaShop ) では明らかに理由ではありません。
どのバージョンを使用していますか? and
よりも読みやすいです&&
か?それとも違いはありませんか?
開発者が and の代わりに and を使用することを決定したコードベースAND
がOR
あり&&
ます||
。
&&
演算子の優先順位 ( go before ) に違いがあることは知っていますがand
、指定されたフレームワーク (正確にはPrestaShop ) では明らかに理由ではありません。
どのバージョンを使用していますか? and
よりも読みやすいです&&
か?それとも違いはありませんか?
と を使用するAND
とOR
、最終的には次のようなことにつまずいてしまいます。
$this_one = true;
$that = false;
$truthiness = $this_one and $that;
$truthiness
何が等しいかを推測したいですか?
あなたが言ったならfalse
... bzzzt、ごめんなさい、違います!
$truthiness
上記の値は ですtrue
。なんで? より優先順位=
が高い。暗黙の順序を示すために括弧を追加すると、これがより明確になります。and
($truthiness = $this_one) and $that
&&
最初のコード例の代わりにを使用するand
と、期待どおりに動作し、false
.
以下のコメントで説明されているように、括弧は よりも優先されるため、これは正しい値を取得するためにも機能します=
。
$truthiness = ($this_one and $that)
使い方によっては、必要で便利な場合もあります。 http://php.net/manual/en/language.operators.logical.php
// "||" has a greater precedence than "or"
// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;
// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;
しかし、ほとんどの場合、@Sarfraz が言及したように、CodeIgniter フレームワークで見たこれのすべての発生のように、開発者の好みのように思えます。
条件割り当てで使用できるand
よりも優先順位が低いため:=
if ($var = true && false) // Compare true with false and assign to $var
if ($var = true and false) // Assign true to $var and compare $var to false
安全のために、私は常に比較対象を括弧で囲み、スペースを空けています。そうすれば、演算子の優先順位に頼る必要がなくなります。
if(
((i==0) && (b==2))
||
((c==3) && !(f==5))
)
優先順位は&&とandの間で異なり(&&はandよりも優先順位が高くなります)、三項演算子と組み合わせると混乱を招きます。例えば、
$predA && $predB ? "foo" : "bar"
文字列を返しますが、
$predA and $predB ? "foo" : "bar"
ブール値を返します。
どのバージョンを使用していますか?
私がコードを書いている特定のコードベースのコーディング標準で、使用する演算子が指定されている場合は、間違いなくそれを使用します。そうでない場合、そしてコードがどちらを使用すべきかを指示している場合 (頻繁ではありませんが、簡単に回避できます)、それを使用します。そうでなければ、おそらく &&
.
「and」は「&&」より読みやすいですか?
それはあなたにとってより読みやすいですか。オペレーターの周りのコードや実際にそれを読んでいる人を含む多くの要因に応じて、答えはイエスかノーかで決まります!
|| ~違いはありますか?
代入操作のif
ないステートメントを使用した別の良い例。=
if (true || true && false); // is the same as:
if (true || (true && false)); // TRUE
と
if (true || true AND false); // is the same as:
if ((true || true) && false); // FALSE
AND
優先順位が低く、したがって優先順位が高いため||
です。
true, false, false
との場合は異なりtrue, true, false
ます。詳細な例については、 https://ideone.com/lsqovsを参照してください。
好みの問題だと思いますが、(誤って)それらを混同すると、望ましくない動作が発生する可能性があります。
true && false || false; // returns false
true and false || false; // returns true
したがって、&& と || を使用します。優先順位が最も高いため、より安全です。読みやすさに関しては、これらの演算子は十分に普遍的だと思います。
更新: 両方の操作が false を返すというコメントについて...まあ、実際には上記のコードは何も返さないので、あいまいで申し訳ありません。明確にするために: 2 番目のケースの動作は、操作の結果がどのように使用されるかによって異なります。ここで、演算子の優先順位がどのように作用するかを観察してください。
var_dump(true and false || false); // bool(false)
$a = true and false || false; var_dump($a); // bool(true)
その理由$a === true
は、他の回答ですでに非常によく説明されているように、代入演算子が論理演算子よりも優先されるためです。