对于下面的代码,sonarqube计算方法圈复杂度为9
String foo() {
if (cond1) return a;
if (cond2) return b;
if (cond3) return c;
if (cond4) return d;
return e;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,根据计算规则http://docs.sonarqube.org/display/SONAR/Metrics+-+Complexity,9的复杂性是正确的.因此该方法的复杂性是= 4(如果)+ 4(返回)+ 1(方法)= 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;
}
Run Code Online (Sandbox Code Playgroud)
我相信这个代码比以前的版本更混乱,更难以理解,我觉得拥有返回保护条件的方法是一种更好的编程习惯.那么有什么理由可以考虑返回语句来计算圈复杂度?可以改变计算逻辑,使其不会促进单一退出点.