【问题标题】:Objective C - Which syntax?Objective C - 哪种语法?
【发布时间】:2009-08-04 21:58:23
【问题描述】:

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

if(!myViewController.view.superview)

或:

if(myViewController.view.superview == nil)

谢谢!!

【问题讨论】:

    标签: objective-c syntax boolean null


    【解决方案1】:

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

    说 !myViewController.view.superview 意思是“没有超级视图”很清楚。

    说myViewController.view.superview == nil意思superview是nil也很清楚。

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

    如果没有superview那么

    我不会说

    如果超级视图什么都不是,那么

    但它们是如此接近且完全等同,以至于几乎不值得与之保持一致。不要误会我的意思,我一般都是为了一致性,只是两者之间的可读性确实没有区别。

    【讨论】:

      【解决方案2】:

      我使用第二种形式,因为那样意图更清楚。

      【讨论】:

        【解决方案3】:

        以下是 Google 的 Objective C 编码标准的链接: http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml

        他们没有明确说明他们喜欢哪种方式,但他们确实说只使用 nil 进行逻辑检查,您上面的示例就符合条件。

        【讨论】:

          【解决方案4】:

          我个人很长一段时间都使用后一种表达方式,但反过来。使用“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;
          }
          

          我的意思是,确保你了解背景和细微之处。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-21
            • 1970-01-01
            • 2012-01-12
            • 1970-01-01
            • 1970-01-01
            • 2011-06-22
            • 1970-01-01
            • 2013-02-16
            相关资源
            最近更新 更多