Sonar-zyklomatische Komplexität-Regel-Problem - rät, mehrere return-Anweisungen

Für das folgende Stück code, sonarqube berechnet die Methode die zyklomatische Komplexität als 9

String foo() {
    if (cond1) return a;
    if (cond2) return b;
    if (cond3) return c;
    if (cond4) return d;
    return e;
}

Verstehe ich als pro die Regeln für die Berechnung http://docs.sonarqube.org/display/SONAR/Metrics+-+ - Komplexität die Komplexität von 9 richtig ist.
So dass die Komplexität der Methode ist = 4 (if) + 4 (return) + 1 (Methode) = 9

Diese Komplexität kann reduziert werden, wenn ich einen einzigen Punkt beenden.

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;
}

Ich glaube, dieser code ist unübersichtlich und nicht mehr lesbar ist als die Vorherige version und ich habe das Gefühl dass Methoden mit return-on-guard-Bedingungen ist ein besserer Programmierstil. So ist es ein guter Grund, warum der return-Anweisung gilt für die Berechnung der zyklomatischen Komplexität? Kann die Logik für die Berechnung geändert werden, so dass es nicht zu fördern einzigen Punkt beenden.

  • Ich würde Ihnen Zustimmen. Es gibt wirklich nichts falsch mit mehrere gibt. Wie Sie sehen können heregibt es historische Gründe, die hinter der Idee, aber es sollte nicht sein, nichts falsch mit Ihrem Gebrauch in eine moderne Sprache. Allerdings, ich weiß nicht, wie zu ändern, die Methode der Berechnung, so wird dies bleiben, ein Kommentar.
InformationsquelleAutor gopalsaob | 2014-05-22
Schreibe einen Kommentar