更快地使 IF 条件失败
Failing an IF condition sooner
假设我有这个 IF
if ([self verifyCondition1] && [self verifyCondition2])
Objective-C 会在失败前执行两个 verifyCondition
方法吗?还是会在 verifyCondition1
失败后立即失败?
我的想法是不执行不需要的代码,加快执行速度。
C 标准指定了 short-circuit 求值,即 "technical" 术语来表示您所询问的内容。因此,如果 [self verifyCondition1]
returns NO/FALSE,执行会立即继续到 else
块(如果有的话),或者执行到 if
语句之后的代码。
兄弟你自己验证吧。你可以通过它来确定。 Avi 是正确的。如果第一个条件失败,它会触发其他条件。
- (BOOL)check1 {
NSLog(@"condition 1");
return NO;
}
- (BOOL)check2 {
NSLog(@"condition 2");
return YES;
}
if ([self check1] && [self check2]) {
NSLog(@"YES");
}
如果您来自 'C' 背景,那么这应该不是什么 mind-boggling 事情。
由于您正在对两个值进行条件检查,因此值可能是 True/False (YES/NO) 并且表达式检查 short-circuit 两者。
结果很明显,如果第一个条件失败,那么它永远不会检查后面的条件。
以下屏幕截图描述了相同的情况。
这对任何地方都有帮助吗?
是的,的确如此。
几个例子:
if (array.count>0 && [array[0] isEqualToString:@"someString"]){
...
}
其他示例:
if ([returnedObject isKindofClass:[MyBoxClass class]] && returnObject.length * returnedObject.bredth>0){
....
}
假设我有这个 IF
if ([self verifyCondition1] && [self verifyCondition2])
Objective-C 会在失败前执行两个 verifyCondition
方法吗?还是会在 verifyCondition1
失败后立即失败?
我的想法是不执行不需要的代码,加快执行速度。
C 标准指定了 short-circuit 求值,即 "technical" 术语来表示您所询问的内容。因此,如果 [self verifyCondition1]
returns NO/FALSE,执行会立即继续到 else
块(如果有的话),或者执行到 if
语句之后的代码。
兄弟你自己验证吧。你可以通过它来确定。 Avi 是正确的。如果第一个条件失败,它会触发其他条件。
- (BOOL)check1 {
NSLog(@"condition 1");
return NO;
}
- (BOOL)check2 {
NSLog(@"condition 2");
return YES;
}
if ([self check1] && [self check2]) {
NSLog(@"YES");
}
如果您来自 'C' 背景,那么这应该不是什么 mind-boggling 事情。
由于您正在对两个值进行条件检查,因此值可能是 True/False (YES/NO) 并且表达式检查 short-circuit 两者。
结果很明显,如果第一个条件失败,那么它永远不会检查后面的条件。
以下屏幕截图描述了相同的情况。
这对任何地方都有帮助吗?
是的,的确如此。
几个例子:
if (array.count>0 && [array[0] isEqualToString:@"someString"]){
...
}
其他示例:
if ([returnedObject isKindofClass:[MyBoxClass class]] && returnObject.length * returnedObject.bredth>0){
....
}