【问题标题】:Refactoring If Statements For Better Readability重构 If 语句以获得更好的可读性
【发布时间】:2019-01-04 10:15:28
【问题描述】:

我目前正在做一个项目,该项目将减少一个被其他几个类使用的类。

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

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

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

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

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

【问题讨论】:

  • 我会说你的第一个解决方案是最好的可读性。为什么要让它“更具可读性”?
  • 你的两个代码块做不同的事情。 classToBeRemoved() 是否需要调用?
  • @RobertvanderSpek 该代码适用于整个团队,因此其他人应该可以轻松使用。
  • @khelwood 的目标是减少整个项目的课程,因为不再需要它。
  • 这个问题主要是自以为是。这也很大程度上取决于具体情况,以及项目中使用的编码约定。

标签: java refactoring readability negation


【解决方案1】:

也许有函数,隐约像:

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&lt;?&gt;)。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多