语言不可知 – 所有的编程语言都有布尔短路评估吗?

PHP代码中

if(a() && b())

当第一个操作数计算为false时,将不会计算b()。

类似地,

if (a() || b())

当第一个操作数求值为true时,b()不会被求值。

这是真的对于所有的语言,如Java,C#等等?

这是我们使用的测试代码。

<?php
function a(){
echo 'a';
return false;
}

function b(){
echo 'b';
return true;
}


if(a() && b()){
echo 'c';
}
?>
最佳答案
这称为short-circuit evaluation

它通常适用于从C(C,C,Java,C#)派生的语言,但对所有语言不是真的。

例如,VB6不这样做,也没有在早期版本的VB.NET中完成。 VB8(在Visual studio 2005中)为此引入了AndAlsoOrElse运算符。

此外,从评论,似乎csh执行从右到左的短路评估,使事情更混乱。

还应当指出,短路评估(或缺乏)具有其需要注意的危险。例如,如果第二操作数是具有任何副作用的函数,则代码可能不如程序员所期望的那样精确地执行。

转载注明原文:语言不可知 – 所有的编程语言都有布尔短路评估吗? - 代码日志