Objective-C是否评估if... else if...
块上的每个语句,或者它是否会对每个语句进行评估,然后在找到真实条件时跳过剩余的评估?
这是一个与绩效相关的实用问题,而不是其他任何问题。
是的,我确实知道if块本身的内容没有被执行,但我指的是被评估的实际语句。
实施例
if ([condition A] == test) {
// Do something
} else if ([condition B] == test) {
// Do something
} else if ([condition C] == test) {
// Do something
} else {
// Do something because all other tests failed
}
所以...如果条件A为真,那么条件B和C是否还要进行评估?
如果他们这样做,那么使用switch语句执行的方式是否相同,或者一个switch只测试每个条件,然后因为中断而退出评估?
我的理解是,在if... else if...
块上,每个条件都会被评估,因此使用一个开关或嵌套if(呃 - 不要在那里思考)在大量的评估操作上可能会更快数据(数十万个项目正在检查可能的一百个陈述)。
好奇: - )
答案 0 :(得分:12)
不,如果满足条件A,则不评估B和C.实际上,它们是其他条款的一部分,无论如何都不会被执行。
只是旁注:if (condA || condB)
或if(condA&& condB)也懒惰地评估,即在第一种情况下condB仅在condA为假时评估,在第二种情况下condA为真。
答案 1 :(得分:4)
它只会对它们进行评估。 if ... else if
块等同于if.. else {if...}
。它的行为与嵌套ifs的行为相同,它的格式很好,省略了一些大括号。
答案 2 :(得分:2)
在[]的Objective-c之外,其行为方式与C完全相同。
对于if() ... else if() ... else ...
个链,这意味着每个表达式都会被计算,直到一个表达式计算为true并输入该块。基本上
if (a) {
...
} else if (b) {
...
} else {
...
}
被解释为
if (a) {
...
} else {
if (b) {
...
} else {
...
}
}