我有以下几行代码:
if(
checker.this()==false ||
checker.that()==false ||
checker.what()==true||
checker.cool()==false ||
checker.damm()==true
(...)
)
{
option = Option.FALSE;
}
必须执行约20次检查。我发现这是用if
多个OR
序列编写{{1}}的最“视觉可容忍”形式,但我还不满意。是否有编码标准?
感谢。
答案 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();
}