我的“if condition”如下所示,
if (expression1 || expression2) {
// do something
} else {
// do something
}
我的问题是,如果expression1得到满足,那么代码流将转到else part或expression2得到检查,然后转到else部分。
答案 0 :(得分:6)
在大多数语言中,包括Objective C, ||和&&是短路运营商。 只要不再需要检查这些运算符的参数,它们就不是。因此,如果expression1为true,则整个表达式为:
if (expression1 || expression2)
肯定评估为:
if(true OR X)
根据定义为true,因此不需要检查X的值。这种短路行为显然取决于第一个变量的值。如果我们有:
if(false || X)
我们必须检查X的值来评估整个表达式。同样,如果我们有:
if(true && X)
我们需要检查X的值,然后才能决定表达式是否计算为true。但是,如果我们有:
if(false && X)
我们知道整个表达式无论如何都是假的,因此不需要检查X - 在许多语言中,它不会被检查。
即使X是一个复合语句本身由多个变量组成,上述观点也是正确的。所以在:
if (true || (expression2 || expression3))
(expression2 || expression3)
部分不需要进行评估,因为无论expression2和expression3如何评估,整个语句仍然为真。
答案 1 :(得分:1)
如果将expression1
评估为true
,则根本不评估expression2
,因为无论评估true
,if表达式都为expression2
。
如果将expression1
评估为false
,则评估expression2
。如果expression2
评估为false
,那么if
会转到else
语句
你可以这样想:
if (expression1){
//execute_block_1
} else if(expression2){
//execute_block_1
}else{
//execute_block_2
}
答案 2 :(得分:0)
$a || $b gives TRUE if either $a or $b is TRUE.
答案 3 :(得分:0)
|| 是 OR 的标志,如果任何一个变量具有 true 值,则返回 true 。
if(expression1 || expression 2)
这意味着如果一个变量expression1或expression2返回 true 值,那么整个条件将返回 true 值。
&& 是 AND 的标志,如果任何一个变量的 false 值,则返回 false
if(expression1 && expression 2)
这意味着如果一个变量expression1或expression2返回 false 值,那么整个条件将返回 false 值。在这种情况下,如果两个变量都是 true 然后,如果条件返回 true 值