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