当检查对象是否是nil,有人使用1:对象== nil或nil ==对象来检查对象是否为零?
if (object == nil) {
//...
}
有人使用2:
if (nil == object) {
//...
}
1和2之间的任何差异?哪一个更好?
当检查对象是否是nil,有人使用1:对象== nil或nil ==对象来检查对象是否为零?
if (object == nil) {
//...
}
有人使用2:
if (nil == object) {
//...
}
1和2之间的任何差异?哪一个更好?
的区别主要是,如果你mistakingly忘记=
e.g这样
(nil = myObject)
因为你不能分配一个值为零,你会得到一个错误。所以它是某种安全的。
不,只是在可读性方面我更喜欢第一个,而其他一些开发人员可能更喜欢另一个。
它只是一个编码风格问题,它根本没有技术上的差异。
有些人可能会说第二个更好,因为它更明确,nil
排在第一位,所以更容易注意到我们正在测试nil
,但它又取决于开发人员的口味。
它不是零,它是NULL。 他们是一样的。 ==运算符是一个比较运算符。作为一种趋势,我们使用(object == NULL)
在Objective-C(因为这个问题被标记),它是'nil'在这种情况下。 – marramgrass
某些开发人员更喜欢“Yoda conditionals”的原因是不太可能在无意中编写if (object = nil)
(注意作业)。
这不再是一个问题,因为编译器在没有额外括号的条件表达式中进行赋值时会发出警告。
由于Yoda条件的可读性较差,因此应避免。
使用nil == object
实际上是一种成语,可以防止在您的表达中错过=
的不幸事件。例如,你想要写:
if (object == nil)
但写:
if (object = nil) {
这是一个典型的错误,一个是很难追查,因为分配也有一个值作为一个表达式,因此条件将评估为假(没有错误),但你也将有消灭了你的对象......
在另一方面,写
if (nil == object)
你保证那种错误将由编译自
if (nil = object)
被检测是不是正规的分配。
其实,现代的编译器(默认设置),将提供一种“意外”的分配,即一个警告:
if (object = nil) {
将引发警告;但这仍然是棘手的。
根本没有区别。这都是关于可读性的。如果你想写一个干净的代码,你应该照顾这个。
如果您将“对象”放在评估的右侧,它会变得不那么明显,你到底在做什么。
它们是等价的。回到过去,编写if (CONST == variable)
以减少意外分配的风险很常见。例如。 if (variable = CONST)
会为该变量分配一个常量,并且if语句将根据常量的值而不是变量评估为真或假。
如今,IDE和编译器通常足够聪明,可以在这些行上发出警告。由于可读性,许多人更喜欢第一个版本。但真的是一个风格问题。
使用比较运算符==时的最佳做法是将常量放在操作数的左侧。以这种方式,不可能意外地错误地输入赋值运算符而不是比较。
例如:
(iVarOne == 1)
在功能上等于
(1 == iVarOne)
但
(iVarOne = 1)
与
0123大不相同(1 = iVarOne)
这个最佳实践工作回避的事实,当你输错了一个比较运营商分配的编译器不抱怨...
正如其他人指出的那样,他们是等价的。也有另一种方式来做到这一点:
if (!object) {
// object is nil
}
有两个没有什么区别.. – Krishanbhag