【发布时间】:2009-08-04 21:58:23
【问题描述】:
您认为哪种语法更好/更具可读性?
if(!myViewController.view.superview)
或:
if(myViewController.view.superview == nil)
谢谢!!
【问题讨论】:
标签: objective-c syntax boolean null
您认为哪种语法更好/更具可读性?
if(!myViewController.view.superview)
或:
if(myViewController.view.superview == nil)
谢谢!!
【问题讨论】:
标签: objective-c syntax boolean null
两者非常接近,这取决于个人品味或相关项目的条件。
说 !myViewController.view.superview 意思是“没有超级视图”很清楚。
说myViewController.view.superview == nil意思superview是nil也很清楚。
我可能更喜欢前者,因为如果我用英语写作,我会说:
如果没有superview那么
我不会说
如果超级视图什么都不是,那么
但它们是如此接近且完全等同,以至于几乎不值得与之保持一致。不要误会我的意思,我一般都是为了一致性,只是两者之间的可读性确实没有区别。
【讨论】:
我使用第二种形式,因为那样意图更清楚。
【讨论】:
以下是 Google 的 Objective C 编码标准的链接: http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml
他们没有明确说明他们喜欢哪种方式,但他们确实说只使用 nil 进行逻辑检查,您上面的示例就符合条件。
【讨论】:
我个人很长一段时间都使用后一种表达方式,但反过来。使用“foo == nil”(或 nil == foo,以避免因忘记一个 '=' 而导致的错误)更加迂腐。最终你会厌倦打字,而且第一个版本也不会出现意外的 nil 赋值错误。
对于新编码人员来说,详细说明他们正在编码的内容是有好处的,因为它提供了迫使他们思考真正发生的事情的练习,但是稍后,当然会切换到一个更快的版本,如果它是等效的。
如果出于某种疯狂的原因,nil 指针不再为 0,而是其他一些无效值(有整个巨大的内存区域作为指针无效),然后使用 '!'不再起作用了,但这永远不会发生(或者如果发生了,他们会添加对编译器的支持以重载'!'所以当与对象指针一起使用时它意味着“不是无效的”并且会做正确的事情无论如何,否则世界上的 Objective-C 开发人员会发疯)。
唯一微妙的问题是它可以开始训练你将 C 的布尔表达式的值与其他类型的值混淆,它们不是一回事。因此,如果您开始认为布尔表达式只是一个 BOOL,例如,您可能会认为将任何非零值分配给 BOOL 变量会满足您的要求,但事实并非如此。由于 BOOL 只是一个字符(当前),如果您执行以下操作:
- (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;
}
我的意思是,确保你了解背景和细微之处。
【讨论】: