在复杂条件下避免过度括号

时间:2018-09-18 13:56:41

标签: syntax

您是否认为使用臭味代码使用括号来否认这种情况?如果是这样,那么正确的格式是什么?

例如:

    for(int i = 0; i < array.size(); i++) {
        test += "just a test";

        if (!(array.size() == i+1)) {
            test += ",";
        }
    }

逗号不仅应出现在最后一次迭代中

2 个答案:

答案 0 :(得分:1)

在本例中,使用不等式运算符会更好:

if (array.size() != i+1) {
    test += ",";
}

在执行!=之前先评估左侧和右侧,因此如果array.size()返回10i设置为5,则{ {1}}的计算结果为array.size() != i+110 != 5+1,它们返回10 != 6。如果将true设置为i,则9的计算结果为array.size() != i+110 != 9+1,它们返回10 != 10

通常,在引用将返回布尔值的方法时使用“ not”运算符,并且需要测试条件的逆项:

false

答案 1 :(得分:0)

特定于C#,这在某种程度上可能有用的一种边缘情况是否定is运算符和模式匹配:

if (!(foo is Bar bar))
{
    // Do something
} 

除了特定于语言的细微差别外,更清晰的意图是遵循 not equal to 关系运算符,以了解您使用的是哪种语言:

  • Fortran:/=
  • 基本:<>
  • 卢阿:~=
  • C:!=
  • 批次:NEQ

请注意,某些语言具有特殊的相等运算符,应根据要比较的对象使用它们。对于Javascript,您同时具有不等式(!=)和非同一性(!==),它们的行为不同。