我在sonarqube 嵌套如果深度
上遇到此违规行为 if (some condition){
some code;
if (some condition) {
some code;
}
}
也在这里:
for (some condition) {
if (some condition) {
some code;
}
}
如何减少深度?
答案 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,则需要重构代码并将每个第二个条件检查放在一个单独的方法中。没有冒犯,但除非你有一个非常具体和充分的理由去做,它看起来有点愚蠢。