降低if-else语句的代码复杂度

Ang*_*ina 2 java if-statement sonarqube

我的代码分析插件抱怨包含以下代码的方法的代码复杂性。我注意到以下代码看起来可以合并,但是我不确定该怎么做:

for(Command command : commands) {
    if (command instanceof AddCommand || command instanceof UpdateCommand) {
        if (!isMaturityDateInPast() && !paymentDueDate().isAfter(LocalDate.now())) {
            command.execute(request);
        }
    } else {
        command.execute(request);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试引入布尔变量并将其设置在if和else语句中,但这只会增加更多的代码行。在逻辑上放置有共同点的代码部分时,我不是很好。我可以说这if-else可以合并,但我不知道该怎么做。有人可以照亮吗?

Fal*_*len 6

我会尽早continue避免重复command.execute()。我认为不应该将条件组合在一起或创建另一个函数是不值得的。

for(Command command : commands) {
  if (command instanceof AddCommand || command instanceof UpdateCommand) {
    if (isMaturityDateInPast() || paymentDueDate().isAfter(LocalDate.now())) {
        continue;
    }
  }
  command.execute();
}
Run Code Online (Sandbox Code Playgroud)