3

在检查对象是否为 nil 时,有人使用 1:

if (object == nil) {
    //...
}

有人使用2:

if (nil == object) {
    //...
}

1和2有区别吗?哪一个更好?

4

9 回答 9

7

不同之处主要在于,如果您错误地忘记了=这样的例子

 (nil = myObject)

你会得到一个错误,因为你不能给 nil 赋值。所以它是某种故障安全的。

于 2012-06-25T09:35:36.103 回答
4

正如其他人指出的那样,它们是等价的。还有另一种方法:

if (!object) {
    // object is nil
}
于 2012-06-25T09:52:43.693 回答
4

使用 of实际上是一种成语,以防止您在表达式中nil == object错过 a 的不幸情况。=例如,你想写:

if (object == nil)

但写:

if (object = nil) {

这是一个典型的错误,很难追踪,因为赋值也有一个值作为表达式,因此条件将评估为假(无错误),但您也将清除您的对象...

另一方面,写作

if (nil == object)

您确保编译器会检测到这种错误,因为

if (nil = object)

不是常规任务。

实际上,现代编译器(默认设置)将为这种“意外”赋值提供警告,即:

if (object = nil) {

会发出警告;但这仍然很棘手。

于 2012-06-25T09:37:07.317 回答
3

一些开发人员更喜欢“尤达条件”的原因是它不太可能无意中编写if (object = nil)(注意分配)。

这不再是一个问题,因为编译器在没有额外括号的条件表达式中进行赋值时会发出警告。

由于尤达条件句的可读性较差,因此应避免使用。

于 2012-06-25T09:36:53.977 回答
2

它们是等价的。在过去,写作if (CONST == variable)以减少意外分配的风险是很常见的。例如if (variable = CONST),将为变量分配一个常量,并且 if 语句将根据常量的值而不是变量的值来评估为真或假。

如今,IDE 和编译器通常足够聪明,可以在这些行上发出警告。由于可读性,许多人更喜欢第一个版本。但实际上这是一个风格问题。

于 2012-06-25T09:37:32.920 回答
1

不,只是在可读性方面我更喜欢第一个,而其他一些开发人员可能更喜欢另一个。

它只是一个编码风格问题,它根本没有技术差异。

有人可能会说第二个更好,因为它更明确,nil所以它更容易注意到我们正在测试nil,但这又取决于开发人员的品味。

于 2012-06-25T09:33:09.267 回答
1

使用比较运算符 == 时的最佳做法是将常量放在操作数的左侧。这样就不可能不小心误输入赋值运算符而不是比较。

例子:

(iVarOne == 1)

在功能上等于

( 1 == iVarOne)

(iVarOne = 1)

(1 = iVarOne)

这个最佳实践解决了这样一个事实,即当您错误键入比较运算符的赋值时,编译器不会抱怨......

于 2012-06-25T09:38:47.067 回答
0

完全没有区别。这都是关于可读性的。如果您想编写干净的代码,则应该注意这一点。

如果您将“对象”放在评估的右侧,那么您真正在做什么就变得不那么明显了。

于 2012-06-25T09:37:29.047 回答
-3

它不是 NIL,它是 NULL。他们是一样的。== 运算符是比较运算符。作为一般趋势,我们使用 (object==NULL)

于 2012-06-25T09:36:44.730 回答