1

我看到 Nimbus 中的一些代码如下所示:

if (nil == someObject)

但我通常输入:

if (someObject == nil)

这些说法有什么不同吗?

4

5 回答 5

4

不。

(对于 SO 最低帖子规则,额外的废话废话。它们没有用吗?)

于 2012-08-16T15:08:57.857 回答
3

它们在功能上相同,只是编码风格问题。

在过去,如果您错过了等号,您的编译器不会警告您。

if (someObject = nil) 

可能不会做你想做的事。但是如果你反转它们:

if (nil = someObject)  

然后编译器会抱怨。

这些天它可能没有任何区别。

于 2012-08-16T15:10:53.660 回答
2

技术上没有。前者,Nimbus,正在使用被称为“尤达条件”的东西。

游戏的名称在这里是万无一失的。看,问题是这样的:

if (someObject = nil) // SETS someObject to nil

是完全有效的,只有一个字符== nil,而且很容易错过。但是,如果您尝试这样做:

if (nil = someObject)

你的编译器会吓坏,防止这个问题。

就个人而言,我讨厌尤达条件句,因为我认为它们很难阅读。这确实意味着对我的代码要格外小心,但是,嘿,我更擅长它,对吧?这一切都归结为这里的风格,所以无论什么让你更舒服,去吧。

哦,如果您使用的是 Xcode,这几乎是一个有争议的问题。如果您查看这个问题,您会看到如果您尝试在if没有额外括号的情况下进行分配,Xcode 现在会警告您。那是,

if (someObject = nil) // throws a warning, whereas
if ((someObject = nil)) // does not

使这个问题更难错过。

于 2012-08-16T15:14:24.093 回答
1

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

左侧:“被审问”的表达方式,其价值更不稳定。

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

于 2012-08-16T15:13:41.600 回答
0

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

于 2012-08-16T15:14:47.263 回答