避免在复杂条件下使用过多的括号

  • 本文关键字:复杂 条件下 syntax
  • 更新时间 :
  • 英文 :


你认为臭代码是使用括号来否认条件吗?如果是这样,那么正确的形式是什么?

前任:

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设置为5array.size() != i+1计算结果为10 != 5+1或返回true10 != 6。如果i设置为9,则array.size() != i+1的计算结果为10 != 9+110 != 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的情况下,你同时有不等式(!=(和非恒等式(!==(,它们的行为不同。

最新更新