我的“如果条件”如下所示,

if (expression1 || expression2) {
    // do something
} else {
   // do something
}

我的问题是,如果 expression1 得到满足,则代码流转到 else 部分,或者 expression2 被检查然后转到 else 部分。

最佳答案

在大多数语言中,包括 Objective C, ||和 && 是短路运算符 一旦不再需要检查这些运算符的参数,它们就不是 。因此,如果 expression1 为真,则整个表达式:

if (expression1 || expression2)

评估为 true 肯定为:
if(true OR X)
根据定义为真,因此不需要检查 X 的值。这种短路行为显然取决于第一个变量的值。如果我们有:
if(false || X)
我们将不得不检查 X 的值来评估整个表达式。同样,如果我们有:
if(true && X)
我们需要先检查 X 的值,然后才能决定表达式的计算结果是否为真。但是,如果我们有:
if(false && X)
我们知道整个表达式无论如何都会是假的,所以 X 不需要检查 - 在许多语言中,它不会。

即使 X 是一个复合语句,它本身由多个变量组成,上述观点也是正确的。所以在:
if (true || (expression2 || expression3))
(expression2 || expression3) 部分不需要计算,因为无论 expression2 和 expression3 的计算结果如何,整个语句仍然为真。

关于objective-c - if 条件如何处理多个表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20948668/

10-14 21:28
查看更多