Java编码标准和多个IF

时间:2011-02-16 14:01:38

标签: java coding-style

我有以下几行代码:

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

必须执行约20次检查。我发现这是用if多个OR序列编写{{1}}的最“视觉可容忍”形式,但我还不满意。是否有编码标准?

感谢。

5 个答案:

答案 0 :(得分:11)

foo==false最好用!foo

编写

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

答案 1 :(得分:11)

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

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

private boolean checkValid(Checker checker) {...}

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

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

答案 2 :(得分:4)

checker.this()==false可以替换为!checker.this()

答案 3 :(得分:3)

我从来没有听说过这样的编码标准。就个人而言,我会将几个if组合成一个考虑可读性的方法。例如,如果你有类似的东西:

if (this || that || what || where || why || cool || wow){ ... }

您可以将其替换为:

if (pronouns() || questions() || exclamations()){ ... }

答案 4 :(得分:2)

我试图找出任何各种检查之间的共同含义,并从中创建函数。

当捆绑在一起描述某种离散的,有意义的事态或要求时,这可以使代码不那么神奇,更容易阅读,更容易测试。

即。像这样的东西,这有点“神奇”

if (a == "world" || b == "dolly" || c == 42 || murder()) {

}
通过将

更改为更像这样的内容,可以使

更具可读性:

if ( canSayHello() || canMeanLife()) {

}
...

boolean canSayHello() {
  return a == "world" || b == "dolly"
}

boolean canMeanLife() {
  return c == 42 || murder();
}