对于以下代码,sonarqube 计算方法的圈复杂度为 9
String foo() {
if (cond1) return a;
if (cond2) return b;
if (cond3) return c;
if (cond4) return d;
return e;
}
我理解根据计算规则http://docs.sonarqube.org/display/SONAR/Metrics+-+Complexity 9 的复杂性是正确的。所以方法的复杂度是 = 4 (if) + 4 (return) + 1 (method) = 9
如果我有一个退出点,则可以降低这种复杂性。
String foo() {
String temp;
if (cond1) {
temp = a;
} else if (cond2) {
temp = b;
} else if (cond3) {
temp = c;
} else if (cond4) {
temp = d;
} else {
temp = e;
}
return temp;
}
我相信这段代码比以前的版本更杂乱和不可读,我觉得拥有返回保护条件的方法是一种更好的编程实践。那么,是否有充分的理由考虑使用 return 语句来计算圈复杂度?是否可以更改计算逻辑,使其不促进单个退出点。