我看到 Nimbus 中的一些代码如下所示:
if (nil == someObject)
但我通常输入:
if (someObject == nil)
这些陈述有什么不同吗?
No.
(额外的废话等等SO最低发布规则。 它们没有用吗?
它们在功能上是相同的,只是编码风格问题。
在过去,如果您错过了等号,编译器不会警告您。
if (someObject = nil)
可能没有做你想做的事。但是如果你反转它们:
if (nil = someObject)
然后编译器会抱怨。
如今,它可能没有任何区别。
技术上没有。前者,Nimbus,正在使用可爱的"尤达条件"。
游戏的名称在这里是万无一失的。看,问题是这个:
if (someObject = nil) // SETS someObject to nil
完全有效,离== nil
只有一个字符,而且真的很容易错过。但是,如果您尝试执行此操作:
if (nil = someObject)
您的编译器会吓坏了,从而防止出现问题。
就个人而言,我讨厌尤达条件,因为我认为它们很难阅读。这确实意味着要格外小心我的代码,但是嘿,我更适合它,对吧?这一切都归结为这里的风格,所以任何让你更舒服的东西,去吧。
哦,如果你使用的是Xcode,这几乎是一个有争议的问题。如果您查看此问题,您将看到 Xcode 现在会警告您,如果您尝试在没有额外参数的情况下在if
内执行作业。那是
if (someObject = nil) // throws a warning, whereas
if ((someObject = nil)) // does not
使问题更难错过。
否,但下面的代码更具可读性。
左边:"被审讯"的表达,其值是 更多在不断变化。
右侧:正在比较的表达式, 其值更恒定。
现在唯一的区别是第二种形式更具可读性(或者可能是主观的,只有我更喜欢它)。