我看到 Nimbus 中的一些代码如下所示:
if (nil == someObject)
但我通常输入:
if (someObject == nil)
这些说法有什么不同吗?
我看到 Nimbus 中的一些代码如下所示:
if (nil == someObject)
但我通常输入:
if (someObject == nil)
这些说法有什么不同吗?
不。
(对于 SO 最低帖子规则,额外的废话废话。它们没有用吗?)
它们在功能上相同,只是编码风格问题。
在过去,如果您错过了等号,您的编译器不会警告您。
if (someObject = nil)
可能不会做你想做的事。但是如果你反转它们:
if (nil = someObject)
然后编译器会抱怨。
这些天它可能没有任何区别。
技术上没有。前者,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
使这个问题更难错过。
不,但下面的代码更具可读性。
左侧:“被审问”的表达方式,其价值更不稳定。
右侧:被比较的表达式,其值更恒定。
现在唯一的区别是第二种形式更具可读性(或者它可能是主观的,只有我喜欢它)。