SonarQube - 嵌套如果深度

时间:2014-09-18 01:02:44

标签: sonarqube

我在sonarqube 嵌套如果深度

上遇到此违规行为
 if (some condition){
     some code;
     if (some condition) {
         some code;
     }
 }

也在这里:

for (some condition) {
     if (some condition) {
          some code;
     }
}

如何减少深度?

2 个答案:

答案 0 :(得分:3)

答案已经被接受,但没有回答实际问题。 所以为了完整起见,我想加上我的2美分。 有关参考,请参阅This question here

您列出的示例看起来正在处理保护条件。类似于"只会运行此方法...."或者"只有...."

才执行此循环迭代

在这些情况下,如果您有3组或4组防护装置,可能会最终缩进,使代码难以阅读。

无论如何,修复此代码以使其更具可读性的方法是尽早返回。 而不是

if (some condition) {
    // some code
    if (some other condition) {
        // some more code
    }
}

你可以写

if (!some condition) {
    return;
}

// some code   

if (!some other condition) {
    return;
}

// some more code

现在,您只有1级嵌套,很明显您不会运行此方法,除非有一些条件'已经满足了。

循环也是如此,使用continue:

for (some condition) {
    if (some other condition) {
        // some code;
    }
}

变为

for (some condition) {
    if (!some other condition) {
        continue;
    }
    // some code
}

除非“其他条件”,否则您在此处声明的内容是'如果满足,你跳过这个循环。

答案 1 :(得分:1)

真正的问题是为什么最大深度设置为1?这太过分了。

这种规则旨在让您的代码可读。超过2个嵌套块可能使代码不可读,但1-2将始终可读。

如果您决定将最大深度设置为1,则需要重构代码并将每个第二个条件检查放在一个单独的方法中。没有冒犯,但除非你有一个非常具体和充分的理由去做,它看起来有点愚蠢。