2012-06-25 63 views

回答

7

的区别主要是,如果你mistakingly忘记= e.g这样

(nil = myObject) 

因为你不能分配一个值为零,你会得到一个错误。所以它是某种安全的。

1

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

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

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

-3

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

+3

在Objective-C(因为这个问题被标记),它是'nil'在这种情况下。 – marramgrass

3

某些开发人员更喜欢“Yoda conditionals”的原因是不太可能在无意中编写if (object = nil)(注意作业)。

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

由于Yoda条件的可读性较差,因此应避免。

4

使用nil == object实际上是一种成语,可以防止在您的表达中错过=的不幸事件。例如,你想要写:

if (object == nil) 

但写:

if (object = nil) { 

这是一个典型的错误,一个是很难追查,因为分配也有一个值作为一个表达式,因此条件将评估为假(没有错误),但你也将有消灭了你的对象......

在另一方面,写

if (nil == object) 

你保证那种错误将由编译自

if (nil = object) 

被检测是不是正规的分配。

其实,现代的编译器(默认设置),将提供一种“意外”的分配,即一个警告:

if (object = nil) { 

将引发警告;但这仍然是棘手的。

0

根本没有区别。这都是关于可读性的。如果你想写一个干净的代码,你应该照顾这个。

如果您将“对象”放在评估的右侧,它会变得不那么明显,你到底在做什么。

2

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

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

1

使用比较运算符==时的最佳做法是将常量放在操作数的左侧。以这种方式,不可能意外地错误地输入赋值运算符而不是比较。

例如:

(iVarOne == 1)

在功能上等于

(1 == iVarOne)

(iVarOne = 1)

0123大不相同

(1 = iVarOne)

这个最佳实践工作回避的事实,当你输错了一个比较运营商分配的编译器不抱怨...

4

正如其他人指出的那样,他们是等价的。也有另一种方式来做到这一点:

if (!object) { 
    // object is nil 
}