你认为臭代码是使用括号来否认条件吗?如果是这样,那么正确的形式是什么?
前任:
for(int i = 0; i < array.size(); i++) {
test += "just a test";
if (!(array.size() == i+1)) {
test += ",";
}
}
逗号不应只出现在上次迭代中
在此示例中,使用不等式运算符会是更好的形式:
if (array.size() != i+1) {
test += ",";
}
在执行!=
之前评估左侧和右侧,因此如果array.size()
返回10
并且i
设置为5
则array.size() != i+1
计算结果为10 != 5+1
或返回true
10 != 6
。如果i
设置为9
,则array.size() != i+1
的计算结果为10 != 9+1
或10 != 10
返回false
。
通常,在引用将返回布尔值的方法时使用"not"运算符,并且需要测试条件的逆函数:
if (!form.validated()) {
// Do something for not validated.
}
特别是对于 C#,这可能有点有用的一种边缘情况是用于否定is
运算符和模式匹配:
if (!(foo is Bar bar))
{
// Do something
}
除了语言特定的细微差别之外,更明确的意图是遵循您正在使用的任何语言的not equal to
关系运算符:
- 福特兰:
/=
- 基本:
<>
- 路亚:
~=
- C:
!=
- 批次:
NEQ
请注意,某些语言具有特殊的相等运算符,应根据要比较的对象使用这些运算符。 在Javascript的情况下,你同时有不等式(!=
(和非恒等式(!==
(,它们的行为不同。