如果条件适用于多个表达式

Dax*_*Dax 4 if-statement objective-c

我的"if condition"如下所示,

if (expression1 || expression2) {
    // do something
} else {
   // do something
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果expression1得到满足,那么代码流将转到else part或expression2得到检查,然后转到else部分.

Mar*_*nov 6

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

if (expression1 || expression2)
Run Code Online (Sandbox Code Playgroud)

肯定评估为真如下:

if(true OR X)

根据定义是真的,因此不需要检查X的值.这种短路行为显然取决于第一个变量的值.如果我们有:

if(false || X)

我们必须检查X的值来评估整个表达式.同样,如果我们有:

if(true && X)

我们需要先检查X的值,然后才能确定表达式的计算结果是否为真.但是,如果我们有:

if(false && X)

我们知道整个表达式无论如何都是假的,因此X不需要被检查 - 在许多语言中,它不会被检查.

即使X是一个复合语句本身由多个变量组成,上述观点也是正确的.所以在:

if (true || (expression2 || expression3))
Run Code Online (Sandbox Code Playgroud)

(expression2 || expression3)不需要对该部分进行求值,因为无论expression2和expression3求什么,整个陈述仍然是真的.