你认为哪种语法更好/更易读?
if(!myViewController.view.superview)
或者:
if(myViewController.view.superview == nil)
Thanks!!
if(!myViewController.view.superview)
或者:
if(myViewController.view.superview == nil)
Thanks!!
我使用第二种形式,因为这样意图更加清晰。
从个人角度来看,我长期以来使用后一种表达式,但是反过来。使用“foo == nil”(或nil == foo,以避免因忘记一个“=”而引起的错误)更加学究。最终你会厌倦输入它,而且第一个版本也免疫了意外的nil赋值错误。
对于新编码者来说,在他们编写代码时详细说明它是好的,因为这提供了实践,迫使他们思考发生了什么,但是后来,当然要切换到一个更快的版本,如果它是等效的。
如果出于某种疯狂的原因,空指针不再是0,而是其他无效值(存在整个巨大的内存区域作为无效指针),那么使用'!'将不再起作用,但这永远不会发生(或者如果发生了,他们将为编译器添加支持以重载'!',以便在与对象指针一起使用时表示“无效”,并且无论如何都会执行正确的操作,否则Objective-C开发者将变得疯狂)。
唯一微妙的问题是,它可能开始训练你混淆C布尔表达式的值与其他类型的值,它们并不相同。因此,如果您开始认为布尔表达式只是一个BOOL,那么您可能会假设将任何非零值分配给BOOL变量将实现您想要的效果,但事实并非如此。由于BOOL只是一个char(目前),如果您执行以下操作: - (BOOL)checkFoo {
BOOL foo = [bar count]; // imagine count is > 255
if(foo)
[self doSomething];
return foo;
}
当将256或更高的数字隐式转换为BOOL时,通过截断得到的结果是零(NO),而不是您想要的YES。
- (BOOL)checkFoo {
BOOL foo = ([bar count] > 0);
if(foo)
[self doSomething];
return foo;
}
或者
- (BOOL)checkFoo {
if([bar count]) {
[self doSomething];
return YES;
}
return NO;
}
这里是谷歌的Objective C编码规范链接: http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml
他们没有明确说明他们更喜欢哪种方式,但他们确实说只使用nil进行逻辑检查,而你上面的例子就符合这个要求。