Sprachverknüpfungen können häufig verwendet werden, um den Code übersichtlicher zu gestalten.
Ternäre und Null-Koaleszenz-Operatoren können beispielsweise die Codemenge reduzieren, was jedoch die Lesbarkeit beeinträchtigt:
In C #:
Person newGuy = new Person();
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
} else {
newGuy.Boss = boss;
}
ist funktional äquivalent zu:
Person newGuy = new Person();
newGuy.Boss = boss ?? GetDefaultBoss();
aber offensichtlich viel ausführlicher.
Wo ziehen Sie die Grenze zwischen Prägnanz und Lesbarkeit?
code-quality
readability
Damovisa
quelle
quelle
Antworten:
Beide.
Ihr erstes Beispiel ist sicherlich ausführlicher und wohl auch expliziter ... aber es erfordert auch, dass ich statt einer fünf Zeilen scanne. Schlimmer noch, es hebt seinen Zweck hervor - einen Wert zuzuweisen
newGuy.Boss
.Ihr zweites Beispiel kann mich eine Sekunde kosten, wenn ich mit dem Null-Koaleszenz-Operator nicht vertraut bin, aber es besteht kein Zweifel an seinem Zweck, und wenn ich eine größere Routine durchsuche, um nach der Quelle eines Werts zu suchen, wird dies der Fall sein Es ist viel einfacher für mich, dies herauszufinden.
Nun kontrastiere dies:
...mit:
Das letztgenannte Beispiel ist wieder viel kürzer, aber jetzt wird sein Zweck dadurch verschleiert, dass Aufgaben, die durch denselben Test ausgelöst wurden, als unterschiedlich erscheinen. Hier halte ich die Ausführlichkeit der ersteren für gerechtfertigt.
quelle
boss
dreimal ausgewertet, im Gegensatz zu nur einmal im ausführlichen Beispiel. Dies ist nur ein weiterer Grund, warum kürzerer Code, nur um kürzer zu sein, eine schlechte Idee ist. Ich denke, Prägnanz sollte an zweiter Stelle des primären Ziels stehen, sei es Lesbarkeit / Wartbarkeit (für komplexen Code) oder Leistung (für kritische Abschnitte innerer Schleifen usw.). Mit anderen Worten, optimieren Sie niemals nur aus Gründen der Übersichtlichkeit - es sei denn, Sie möchten Ihren Code über eine 1-Bit / s-Verbindung senden;)Obwohl beide gute Ziele sind, stehe ich immer auf der Seite der Lesbarkeit, wenn ich gezwungen bin , eines zu wählen.
Ich würde argumentieren, dass Ihr Beispiel sowohl die Lesbarkeit als auch die Kürze verbessert . Beachten Sie jedoch Folgendes:
im Gegensatz zu
Letzteres ist prägnant, aber schwer durchzulesen. Ersteres ist ausführlich, aber der Fluss der Logik ist klar.
Letztendlich dient die Kürze nur dem Zweck, mehr auf den Bildschirm zu passen. Die Lesbarkeit erleichtert das Debuggen und sollte daher generell bevorzugt werden.
quelle
?? whatever.something
.Ich würde generell sagen, dass die Lesbarkeit niemals aus Gründen der Übersichtlichkeit geopfert wird, aber die Lesbarkeit niemals aufgrund mangelnder Kenntnisse eines anderen Programmierers zu diesem Thema beurteilt wird.
Prägnanz und Lesbarkeit sind keine Gegensätze. Wie diese Antwort ist manchmal kürzer besser lesbar.
quelle
??
bedeutet, wenn ich es benutze und sie es dann lernen, haben wir beide davon profitiert. Und es ist nicht schwer, "?? operator" auf msdn.com einzugebenIch würde sagen, ich bevorzuge Lesbarkeit, obwohl das manchmal die Verwendung von prägnantem Code bedeutet. (Dh ternär für relativ einfache Bedingungen innerhalb eines größeren Bedingungsblocks.)
Grundsätzlich sollten Sie es nicht tun, wenn es unnötig schwer zu verstehen ist.
quelle
Die Lesbarkeit steht an erster Stelle, wenn sie im Widerspruch zur Prägnanz steht, da Code häufiger geändert wird als ursprünglich geschrieben. Auf der anderen Seite:
Syntaktisches Rauschen und Boilerplate-Code verschleiern häufig die Absichten und beeinträchtigen somit die Lesbarkeit. Manchmal ist der prägnantere Code auch besser lesbar. Denken Sie beispielsweise an Lambda-Funktionen oder Delegaten / First-Class-Funktionen im Vergleich zu Klassen mit nur einer Methode, die eine Schnittstelle mit nur einer Methode implementieren.
Die Lesbarkeit sollte danach beurteilt werden, wie einfach der Code zu lesen ist, und zwar für einen einigermaßen erfahrenen Programmierer, der die Sprache und ihre einzigartigen / erweiterten Funktionen ziemlich gut kennt, und nicht für einen kaum kompetenten Code-Affen, der nur den kleinsten gemeinsamen Nenner kennt.
quelle
Ein Aspekt, von dem ich glaube, dass er noch nicht erwähnt wurde: Was sind Ihre Ziele?
Wenn Ihnen nur die Arbeitsplatzsicherheit am Herzen liegt, sollten Sie bei allen anderen Aspekten auf Prägnanz und Kompaktheit achten. Überspringen Sie auch das Kommentieren Ihres Codes.
Wenn Sie in der Lage sein möchten, Ihren Code einfach an andere weiterzugeben, während Sie an einem coolen neuen Projekt arbeiten, sollten Sie auf Lesbarkeit, Klarheit und viele solide Kommentare achten.
Hinweis: Bei den obigen Angaben handelt es sich nicht um Sie persönlich, @Damovisa; Es ist für jeden, der zwischen den beiden Positionen wählt.
quelle
Es gibt eine Sache, die die ausführliche Version als Vorteil hat.
Es hat mehr Zeilen und die meisten Debugger sind zeilenorientiert ! Es ist sehr schwierig, einen Haltepunkt in der Mitte eines Ausdrucks zu setzen, aber normalerweise ist es trivial einfach, ihn in einer Blockanweisung zu setzen.
Mit anderen Worten, welche möchten Sie in Ihrem Editor sehen, wenn Ihr Debugger wann aktiv werden soll
boss == null
?(Das heißt ich mag den ?? - Operator)
quelle
Die Lesbarkeit sollte an erster Stelle stehen. Langfristig verbringen die meisten Menschen die meiste Zeit damit, vorhandenen Code zu ändern oder zu erweitern. Die Lesbarkeit ist ein großer Teil der Wartbarkeit.
Das heißt, Prägnanz ist etwas, das zur Lesbarkeit beitragen kann. In Ihrer Frage ist beispielsweise das zweite Snippet lesbarer und übersichtlicher.
quelle