Objective c 目标C-哪种语法?

Objective c 目标C-哪种语法?,objective-c,syntax,boolean,null,Objective C,Syntax,Boolean,Null,您认为哪种语法更好/更具可读性 if(!myViewController.view.superview) 或: 谢谢 我使用第二种形式,因为这样做的意图更为明确。这里有一个指向Google的Objective C编码标准的链接: 他们没有明确说明他们喜欢哪种方式,但他们确实说只在逻辑检查中使用nil,您上面的示例将符合这一要求。两者非常接近,这取决于个人品味或相关项目的条件标准 说!myViewController.view.superview表示“无superview”的意思非常清楚 说m

您认为哪种语法更好/更具可读性

if(!myViewController.view.superview)
或:


谢谢

我使用第二种形式,因为这样做的意图更为明确。

这里有一个指向Google的Objective C编码标准的链接:


他们没有明确说明他们喜欢哪种方式,但他们确实说只在逻辑检查中使用nil,您上面的示例将符合这一要求。

两者非常接近,这取决于个人品味或相关项目的条件标准

说!myViewController.view.superview表示“无superview”的意思非常清楚

说myViewController.view.superview==nil意味着superview是nil也是非常清楚的

我可能更喜欢前者,因为如果我用英语写作,我会说:

如果没有superview,那么

我不会说

如果superview什么都不是,那么


但它们是如此接近,完全等同,以至于几乎不值得与之保持一致。别误会我的意思,总的来说,我完全赞成一致性,只是两者在可读性上确实没有区别。

就我个人而言,很长一段时间我使用了后一种表达方式,但正好相反。使用“foo==nil”(或nil==foo,以避免忘记一个“=”而导致的错误)更迂腐。最终你会厌倦输入它,第一个版本也不会受到意外的nil赋值错误的影响

对于新的程序员来说,详细描述他们正在编写的代码是很好的,因为它提供了迫使他们思考真正发生了什么的练习,但是稍后,当然,如果它是等效的,则切换到一个更快的版本

如果出于某种疯狂的原因,nil指针不再是0,而是其他一些无效的值(有整个巨大的内存区域作为指针无效),那么使用“!”不会再工作了,但这永远不会发生(或者如果真的发生了,他们会向编译器添加对重载“!”的支持,这样当与对象指针一起使用时,它意味着“不无效”,并且无论如何都会做正确的事,否则世界上的Objective-C开发人员会发疯)

唯一微妙的问题是,它可以开始训练你混淆C的布尔表达式的值和其他类型的值,它们不是一回事。所以,如果你开始认为布尔表达式只是一个布尔值,比如说,你可以假设给布尔变量赋值任何非零值都可以满足你的要求,但事实并非如此。由于BOOL只是一个字符(当前),如果您执行以下操作:

    - (BOOL)checkFoo {
  BOOL foo = [bar count]; // imagine count is > 255
    if(foo)
      [self doSomething];
    return foo;
}
如果隐式地将256或更高的值转换为BOOL,则通过截断得到零(否),而不是是,这是您想要的,而不是

    - (BOOL)checkFoo {
  BOOL foo = ([bar count] > 0);
    if(foo)
      [self doSomething];
    return foo;
}

我想说的是,确保你理解背景和微妙之处

    - (BOOL)checkFoo {
  BOOL foo = ([bar count] > 0);
    if(foo)
      [self doSomething];
    return foo;
}
- (BOOL)checkFoo {
    if([bar count]) {
      [self doSomething];
      return YES;
    }
    return NO;
}