Frage

Ist LINQ und Lambda-Ausdrücke reduzieren zyklomatische Komplexität? Einfach nur neugierig, weil CodeRush tatsächlich eine Verringerung der cc zeigt, wenn der VS-Analysator erhöht.

War es hilfreich?

Lösung

Ich vermute, dass die Diskrepanz aufgrund verzögerte Ausführung sein kann. Wenn Sie LINQ mit Lambda-Ausdrücke verwenden, sind Sie Code anzugeben, die ausgeführt werden soll , wenn Sie dann über die Auflistung durchlaufen.

Ich persönlich bin nicht so besorgt über zyklomatische Komplexität, aber ich bin absolut sicher, dass LINQ verbessert die Lesbarkeit (bei sachgemäßem Gebrauch). Das ist, was ich wirklich kümmern uns um:)

Andere Tipps

Ich kam gerade um mit der gleichen Frage und in der Tat, Lambda kann die zyklomatische Komplexität erhöhen. Ich habe den Test und Wo () Klauseln kann es sinnvoll erhöhen.

Ablesbarkeit ist in der Tat eine Ihrer Top-Prioritäten.

Aber es hat mich nicht zu lange einige LINQ-Abfragen von Get () Methoden zu ersetzen, die mir zur Verfügung gestellt mit den gleichen Daten und zusätzlichen Vorteilen.


Ich halte meinen FXCop in meinem Build / script veröffentlichen, damit ich nie etwas bereitstellen, ohne das Ziel von 25 für zyklomatische Komplexität zu erreichen.

Es ist hart, aber ich denke, es ist die Mühe wert.

Dies gewährt mir ein paar Punkte in der Diskussion, wenn meine Kumpels kommen mit einem sehr schlechten Code zu sagen: das funktioniert, ist das, was zählt.


mein Tipp ist. halten Sie Ihre zyklomatische Komplexität unter 25 Dies kann Ihnen helfen, jede Methode einfach genug für eine gute Pflege zu halten.

Jon Skeet so ziemlich die Frage kurz und bündig beantwortet. Ich mag, dass mit Hochsprachen wie C # in meiner Erfahrung hinzuzufügen, wird der Wert von zyklomatische Komplexität Messung wegen des Wertes reduziert wird, dass syntaktische Zucker-Pakete wie LINQ ergänzt Entwicklung.

In den letzten zehn Jahren als Sprachen entwickelt haben, viele auf dem Netz haben eine starke Korrelation zwischen zyklomatische Komplexität und Codezeilen dargestellt, viele von ihnen machen Frage, wie viel Wert eine solche Maßnahme tatsächlich bringt. Ein anderer Weg, um es zu betrachten, dass die Abwertung von CC als Maß für die Qualität des Codes wäre eigentlich eine Behauptung der Bedeutung der Lesbarkeit ist, wie man ist oft das Gegenteil von den anderen Seite.

Zum Beispiel, wenn ich eine bedingte innerhalb einer foreach-Schleife setzen, wird die bedingte als mein Code ausgewertet und die entsprechende Anzahl von Codepfade gezählt wird. Auf der anderen Seite, wenn ich einen Funktionsbaum auf die Sammlung anzuwenden Ich bin iterieren (zB Wo (evalStr => evalStr == origStr) I an der Außenseite der Schleife die bedingte bewege und in Compiler generierten Code. Es gibt immer noch die gleiche Anzahl von Zweigen, jedoch sind die conditionals nicht Teil der Schleife, aber die CC steigt darüber hinaus die foreach Schleife mit „Strafen“ für die Verwendung von anonymen Methoden (Lambdas und Teilnehmer) auf der Oberseite der tatsächlichen Verzweigungszahl. die wo Funktion mir die iteriert Sammlung lässt vorkonditionieren so dass die Schleife nur iteriert, wenn sie muss.

Allerdings ist der Code bei weitem besser lesbar.

Schließlich, wenn man sich entscheidet, dass ein boolescher Ausdruck in einer LINQ IQueryable Funktion muss sein Gerät nicht getestet verwendet, angeblich, weil, wenn es eine Ausnahme, es ist eine höhere Ordnung (auch bekannt als Business-Ebene) Ausnahme (falschen Wert getestet, falschen Operator, falsche Operanden, etc.) im Gegensatz zu einem weniger als idealen Gebrauch der Sprache (mit dem Schalter statt, wenn, wenn anstelle von ternären, etc.), dann zyklomatische Komplexität Messung soll dies berücksichtigen: A Wo () Funktion sollte meine CC nicht erhöhen. Mess zyklomatische Komplexität wird nicht helfen, besseren Code zu machen; wenn überhaupt, wird es künstlich ein Entwickler Tendenz erhöhen zu vereinfachen, wo keine Vereinfachung notwendig oder erwünscht ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top