(null != someVariable) 和 (someVariable != null) 有什么区别?我看到很多人在比较中首先使用“null”。哪一个比另一个更好,为什么?
4 回答
他们评估相同的事物,但最好选择(someVariable != null)
,因为另一种方式是Yoda 条件。它处理可读性。
它们是等价的。
!=
但是,如果您错误键入as ,第一个将导致无效分配错误=
。有些人喜欢这样,因为它很容易键入=
而不是==
,尽管前者并不总是偶然的。
你可以在Annotated ES5==
上看到关于操作符的规范的精确规则。
第一个可能更好,someVariable
实际上是一个具有很长参数列表的函数。乍一看,您的意图会更容易看出。否则,我总是使用第二个。
考虑你想要这个:
if (number == 42) { /* ... */ }
// This checks if "number" is equal to 42
// The if-condition is true only if "number" is equal to 42
现在,假设您忘记了应该有一个双精度=
,而只写了一个单=
精度:
if (number = 42) { /* ... */ }
// This assigns 42 to "number"
// The if-condition is always true
此类错误非常常见,并且在允许在条件中进行变量赋值的编程语言中很难检测到。
现在,考虑颠倒您的条件顺序:
if (42 == number) { /* ... */ }
// This checks if "number" is equal to 42
// The if-condition is true only if "number" is equal to 42
的行为与 的行为42 == number
完全相同number == 42
。
然而,如果犯了上面提到的同样的错误(你忘记应该有一个双=
,而你只写一个=
),行为就不再一样了:
if (42 = number) { /* ... */ }
// This produces an error
因此,有些人更喜欢颠倒他们的条件顺序,因为它使一个常见的错误更容易被发现。这种“反转”的条件被称为尤达条件。
在不允许在条件中进行变量赋值的编程语言(例如 Python 或 Swift)中,使用 Yoda 条件没有任何优势,通常不鼓励使用它们。在其他语言(例如 JavaScript 或 PHP)中,Yoda 条件可能非常有用。但是,最终,这仍然很大程度上取决于您的个人喜好或您的项目需要的任何编码标准。