Gibt es Fälle, in denen ausführlicherer Code (wie in logischeren Anweisungen) sauberer ist als präziserer Code?
refactoring
falscher Benutzername
quelle
quelle
Antworten:
Um das zu beantworten, nehmen wir ein reales Beispiel, das mir passiert ist. In C #, einer von mir verwalteten Bibliothek, hatte ich den folgenden Code:
Bei der Diskussion mit Gleichaltrigen war man sich einig, dass die verschachtelten ternären Ausdrücke in Verbindung mit der "geschickten" Verwendung von
is var
knappem, aber schwer lesbarem Code resultierten.Also habe ich es überarbeitet:
Die ursprüngliche Version enthielt nur einen zusammengesetzten Ausdruck mit einem Implizit
return
. Die neue Version enthält jetzt eine explizite Variablendeklaration, eineif
Anweisung und zwei explizitereturns
. Es enthält mehr Anweisungen und mehr Codezeilen. Alle, die ich konsultierte, hielten es jedoch für einfacher zu lesen und zu argumentieren, die Schlüsselaspekte von "sauberem Code" sind.Die Antwort auf Ihre Frage lautet also nachdrücklich "Ja", ausführlicher kann sauberer sein als prägnanter Code und ist daher ein gültiges Refactoring.
quelle
!
die Bedingung zu entfernen . Ich würde auch vorschlagen, die zweite Rendite in eineelse
. Aber so wie es aussieht, ist es eine massive Verbesserung.if (!foo.HasValue)
es sich um eine Redewendung in Ihrem Code handelt, umso stärker. Allerdingsif
ist das nicht wirklich ein Exit-Early - es ist ein "dies oder das tun, je nachdem".1. Fehlende Korrelation zwischen LOC und Codequalität.
Ziel des Refactorings ist es, die Qualität eines Codeteils zu verbessern.
LOC ist eine sehr grundlegende Metrik, die manchmal mit der Qualität eines Codeteils korreliert. Beispielsweise ist es wahrscheinlich, dass bei einer Methode mit einigen Tausend LOC Qualitätsprobleme auftreten. Es ist jedoch zu beachten, dass LOC nicht die einzige Metrik ist und in vielen Fällen die Korrelation mit der Qualität fehlt. Beispielsweise ist eine 4-LOC-Methode nicht unbedingt besser lesbar oder besser wartbar als eine 6-LOC-Methode.
2. Einige Refactoring-Techniken bestehen aus dem Hinzufügen von LOCs.
Wenn Sie eine Liste von Refactoring-Techniken verwenden , können Sie leicht diejenigen erkennen, die darin bestehen, absichtlich LOCs hinzuzufügen . Beispiele:
Beide sind sehr nützliche Refactoring-Techniken, und ihre Auswirkung auf das LOC ist völlig irrelevant, wenn überlegt wird, ob sie verwendet werden sollen oder nicht.
Vermeiden Sie die Verwendung von LOC.
LOC ist eine gefährliche Metrik. Es ist sehr leicht zu messen und sehr schwer richtig zu interpretieren.
Bevor Sie nicht mit den Techniken zur Messung der Codequalität vertraut sind, sollten Sie zunächst darauf verzichten, den LOC zu messen. Meistens erhalten Sie nichts Relevantes, und es gibt Fälle, in denen Sie in die Irre geführt werden, die Qualität Ihres Codes zu verringern.
quelle
Wenn Sie das ultimative Ergebnis sehen möchten, indem Sie nur die Byteanzahl oder die LoC-Anzahl Ihres Quellcodes minimieren, sehen Sie sich die Einsendungen auf der Stack Exchange Code Golf-Website an .
Wenn Ihr Quellcode auf diese Weise reduziert wird, werden Sie bald ein unhaltbares Durcheinander haben. Selbst wenn Sie derjenige sind, der einen solchen Code geschrieben hat und ihn zu diesem Zeitpunkt vollständig verstanden hat, wie effizient werden Sie sein, wenn Sie in sechs Monaten wieder darauf zugreifen? Es gibt keine Beweise dafür, dass solch minimaler Code tatsächlich auch schneller ausgeführt wird.
Code sollte so geschrieben sein, dass jedes Mitglied Ihres Teams ihn sehen und sofort verstehen kann, was er tut.
quelle
Ja, Refactoring kann definitiv zu mehr Codezeilen führen.
Der häufigste IMO-Fall ist, wenn Sie Code verwenden, der nicht generisch ist, und Sie ihn generischer / flexibler gestalten . Durch die einfache Generierung von Code werden die Codezeilen erheblich vergrößert (manchmal um den Faktor zwei oder mehr).
Wenn Sie davon ausgehen, dass der neu generierte Code von anderen (anstatt nur als interne Softwarekomponente) als Bibliothek verwendet wird, fügen Sie in der Regel unauffälligen Code und In-Code-Dokumentations-Markup hinzu, wodurch die Codezeilen erneut erhöht werden.
Zum Beispiel ist hier ein sehr häufiges Szenario, das für jeden Softwareentwickler auftritt:
Einige konkrete Beispiele, die mir auf den ersten Blick einfallen:
quelle