Java编码标准和多个IF

Fra*_*kie 2 java coding-style

我有以下几行代码:

if(
    checker.this()==false ||
    checker.that()==false ||
    checker.what()==true||
    checker.cool()==false ||
    checker.damm()==true
    (...)
  )
{
    option = Option.FALSE;
}
Run Code Online (Sandbox Code Playgroud)

必须执行大约20次检查.我发现这是最具"视觉可容忍"的形式,if用多个OR序列来写这个,但我还不满意.这有编码标准吗?

谢谢.

Boz*_*zho 11

foo==false 应该更好地写 !foo

可能,如果采用单独的方法,你可以移动它:if (checker.complexConditionMet())或者if (complexConditionMet(checker)).它将提高可读性.

  • 我更喜欢`foo == false`而不是`!foo`,因为```很容易被忽略.这都是(个人)品味的问题 (4认同)
  • @a_horse,那为什么不``(foo == false)== true`? (3认同)
  • 我不喜欢使用方法,因为`.`很容易被忽视. (2认同)
  • @Frankie虽然这是正确的做法,但请确保您不要通过列出其他方法的return语句中的所有条件来移动问题.试着考虑所有条件的含义. (2认同)

DJC*_*rth 11

与此相关的编码标准最接近的是Steve McConnel,其权威书籍"Code Complete"建议将复杂条件考虑在他们自己的方法中,即使它们仅使用一次.这允许方法的名称来描述正在发生的事情.

if (checkValid(checker)) {...}

private boolean checkValid(Checker checker) {...}
Run Code Online (Sandbox Code Playgroud)

当然,checkValid不是一个好名字,应该用更具描述性的东西代替.在这种特殊情况下,您可能希望将check方法作为"checker"对象的一部分.

你还应该避免"something == true"和"something == false",并使用"something"和"!something".如果为布尔方法赋予适当的名称,例如"isOpen()","isEmpty()",而不是"open()"和"empty()",则此过程会有所帮助."checker.isOpen()&&!checker.isEmpty()"非常清楚.