[スレッド全体]

[3] 条件分岐としての && || 演算子 
2000/7/4 (Tue) 10:38:33 - あけび
ファイルオープン時のエラートラップなどでも
結構常用されていたりしますが、
実際の動作を頭に入れておくと
かなり応用が効きます。

例えば、&& はperl系の参考書などでは、

両辺の式が両方とも真なら真を、
どちらか一方でも偽なら偽を返す

などのように解説されていると思いますが、
実際は以下のように処理されています。

式1 && 式2

式1を評価し、その結果が偽であれば偽を返し、
真であれば更に式2を評価し、その結果を返す

同様に、|| は

式1 || 式2

式1を評価し、その結果が真であればその値を返し、
偽であれば更に式2を評価し、その結果を返す

となります。


[6] Re:条件分岐としての && || 演算子 
2000/7/10 (Mon) 16:51:50 - あけび
&& || の代わりに and or を使う場合
例えば、
$a = $b || 1;
とすると、
$b が真である場合は $a には $b の値、
$b が偽であれば $a には 1 が代入されますが、
同じ感覚で
$a = $b or 1;
としても、$b の真偽にかかわらず $b の内容がそのまま
$a に代入されます。

これは、演算子の優先順位が
|| > = > or
であるためです。
同様に、and も = より優先順位が低いので

$a = 1 && 2;
では 1 && 2 が先に評価されるので $a の値は 2 になりますが、
$a = 1 and 2;
では $a = 1 が先に評価され、1 となります。

ちなみに、&& || と見た目の似ている & | 演算子というのもありますが、
こればビット演算子であって動作がまったく違うので、
条件分岐の代わりには使えません。
それどころか、1&2と1&&2等のように、真か偽かさえ違ってくる場合もあるので
ビット演算子を論理演算子と同じつもりで使うのは根本的に間違っています。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.84.01