小编gop*_*aob的帖子

声纳圈复杂度规则问题 - 不鼓励多个返回语句

对于下面的代码,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)

我相信这个代码比以前的版本更混乱,更难以理解,我觉得拥有返回保护条件的方法是一种更好的编程习惯.那么有什么理由可以考虑返回语句来计算圈复杂度?可以改变计算逻辑,使其不会促进单一退出点.

java cyclomatic-complexity sonarqube

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

cyclomatic-complexity ×1

java ×1

sonarqube ×1