重构If语句以提高可读性

时间:2019-01-04 10:15:29

标签: java refactoring readability negation

我目前正在从事一个项目,该项目将减少其他几个班级使用的班级。

if(condition_A)
{
     doSomething();
}
else if(condition_B)
{
     classToBeRemoved();
}
else
{
     doAnother();
}

我想到的第一个解决方案是否定将要修改的if-else语句的条件。

if(condition_A)
{
     doSomething();
}
else if(!condition_B)
{
     doAnother();
}

这种重构方法不会影响代码的功能,但有时如果条件太长,则会影响代码的可读性。

除了否定条件外,还有其他方法可以保持代码的可读性吗?

1 个答案:

答案 0 :(得分:0)

也许带有功能,大概是这样的:

List<BooleanSupplier> actions = new ArrayList<>();
actions.add(() -> {
    if (!condition_A) {
        return false;
    }
    doSomething();
    return true;
});
actions.add(this::canDoSomething);

if (!actions.stream().anyMatch(p::get)) {
    doAnother();
}

我自由地将条件+动作抽象为谓词,而不是使用Pair等。

这很丑陋,但可以解耦,因为现在添加的内容可以来自该类的外部,从而定义了public void addAction(BooleanSupplier action)

尽管可能需要一个参数来提供数据上下文(Predicate<?>)。