目标C - iPhone:在比较中使用nil



我看到 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

使问题更难错过。

否,但下面的代码更具可读性。

左边:"被审讯"的表达,其值是 更多在不断变化。

右侧:正在比较的表达式, 其值更恒定。

现在唯一的区别是第二种形式更具可读性(或者可能是主观的,只有我更喜欢它)。

最新更新