在检查对象是否为零时,有人使用1:
if (object == nil) {
//...
}
有人用2:
if (nil == object) {
//...
}
1和2之间有什么区别?哪一个更好?
答案 0 :(得分:7)
区别主要在于你错误地忘记了=
,例如这个
(nil = myObject)
您将收到错误,因为您无法将值分配给nil。所以它是某种故障安全的。
答案 1 :(得分:4)
使用nil == object
实际上是一种习惯用法,可以防止您在表达式中遗漏=
这一不幸的情况。例如,你想写:
if (object == nil)
但请写:
if (object = nil) {
这是一个典型的错误,而且非常难以追踪,因为赋值还有一个值作为表达式,因此条件将评估为false(无错误),但是你也会消灭掉你的对象...
另一方面,写作
if (nil == object)
确保编译器自
以来检测到这种错误if (nil = object)
不是常规作业。
实际上,现代编译器(默认设置)将为“非预期”分配提供警告,即:
if (object = nil) {
会发出警告;但这仍然很棘手。
答案 2 :(得分:4)
正如其他人指出的那样,它们是等价的。还有另一种方法:
if (!object) {
// object is nil
}
答案 3 :(得分:3)
一些开发人员更喜欢“Yoda conditionals”的原因是它不太可能无意中写if (object = nil)
(注意作业)。
这不再是一个问题,因为编译器在没有额外括号的条件表达式中进行分配时会发出警告。
由于尤达条件的可读性较低,因此应避免使用。
答案 4 :(得分:2)
它们是等价的。回到过去,写if (CONST == variable)
以减少意外分配的风险是很常见的。例如。 if (variable = CONST)
将为变量赋值常量,if语句将根据常量的值而不是变量计算为true或false。
如今,IDE和编译器通常足够聪明,可以在这些线路上发出警告。由于可读性,许多人更喜欢第一个版本。但这真的是一种风格问题。
答案 5 :(得分:1)
不,只是在可读性上我更喜欢第一个,而其他一些开发者可能更喜欢另一个。
它只是一个编码风格问题,它根本没有技术差异。
有些人可能会说第二个更好,因为它更明确,nil
首先出现,所以我们更容易注意到我们正在测试nil
,但这又取决于开发人员的口味。
答案 6 :(得分:1)
使用比较运算符时的最佳做法==是将常量放在操作数的左侧。以这种方式,不可能意外地错误输入赋值运算符而不是比较。
示例:
(iVarOne == 1)
在功能上等于
(1 == iVarOne)
但
(iVarOne = 1)
与
大不相同(1 = iVarOne)
这种最佳实践解决了当您为比较运算符输入错误时编译器不会抱怨的事实......
答案 7 :(得分:0)
完全没有区别。这都是关于可读性的。如果你想写一个干净的代码,你应该注意这一点。
如果您将“对象”放在评估的右侧,那么您真正在做什么就变得不那么明显了。
答案 8 :(得分:-3)
它不是NIL,它是NULL。 他们是一样的。 ==运算符是比较运算符。作为一般趋势,我们使用(object == NULL)