次のコードでは、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 ステートメントが考慮される正当な理由はありますか? 単一の出口点を促進しないように、計算のロジックを変更できますか。