Ich habe kürzlich eine Angewohnheit erworben, von der ich weiß, dass viele von Ihnen sie missbilligen, die mir aber letztendlich hilft, die globale Codestruktur im Auge zu behalten und nicht die Struktur einer einzelnen, (manchmal) sich wiederholenden Methode: das Gruppieren einer Zahl von Anweisungen in einer einzelnen Zeile, wie folgt:
textBox1.Text = "Something!"; textBox2.Text = "Another thing!"; textBox3.Text = "Yet another thing!";
im Gegensatz zu
textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";
Ich mache das für sich wiederholende Aufgaben, um den gesamten Code "Schönheit" beizubehalten und mir zu helfen, die Programmstruktur einfach zu verfolgen, aber ich gebe zu, dass dies möglicherweise keine gute Praxis ist. Ich benutze es tatsächlich sehr oft, daher würde ich gerne wissen, was Sie darüber denken. Denken Sie auch, dass jeder, der jemals meinen Code pflegen müsste, Probleme mit diesem Ansatz hat?
quelle
Antworten:
Ich denke wirklich, dass die Lesbarkeit sowohl für Sie als auch für jeden anderen, der den Code liest, sehr leiden würde. Es macht alles Sinn, wenn Sie es das erste Mal schreiben, weil es aktiv in Ihrem Kopf ist. Wenn Sie Code scannen, um festzustellen, welche Variablen und Funktionen sich wo befinden, ist dies anders. Sie zerstören Ihre eigene Fähigkeit, Ihren eigenen Code zu scannen. Das ist ein riesiges Nein-Nein und darüber hinaus schlecht, wenn jemand Ihren Code jemals lesen muss.
Denken Sie auch darüber nach, wie Sie Code lesen. Es ist immer von oben nach unten und scrollt nach unten. Ihre Methode passt nicht dazu und führt sogar eines der hässlichsten Probleme beim Lesen von Code ein. horizontal scrollen . Unterschätzen Sie niemals, wie schwer das Lesen von Code erschweren kann. Sie scrollen niemals horizontal, Sie lassen niemals Menschen horizontal scrollen, in fast jedem Kontext ist es extrem unnatürlich.
Wenn Ihr Problem die wiederholte Codeeingabe ist, vergessen Sie Strg-C nicht. In Ihrem Beispielcode ist es möglicherweise effizienter, das alles manuell einzugeben. Wenn Sie jedoch einige Zeilen mehrmals kopieren müssen, scheint es genauso effizient zu sein, Zeile eins plus eine neue Zeile zu kopieren, fügen Sie sie ein x mal und nehmen Sie die Änderungen vor, weniger wahrscheinlich, um auch einen Tippfehler zu machen.
Oh, und Tippfehler! Wenn Sie die Lesbarkeit Ihres Codes auf diese Weise beeinträchtigen, kann es zu einem Albtraum werden, herauszufinden, welche der 50 Variablendeklarationen Sie falsch eingestellt haben. Die meisten Compiler geben jetzt Fehler bei Zeilen- UND Spaltennummern an, aber das Auffinden eines Fehlers in einer Zeile ist VIEL einfacher als das Auffinden einer Spalte.
quelle
Eine Anweisung pro Zeile erleichtert es auch zu erkennen, was sich in einem Side-by-Side-Diff geändert hat.
quelle
Während das Beispiel dies nicht zeigt, gibt es ein weiteres Problem beim Gruppieren mehrerer Anweisungen in einer Zeile. Was ist, wenn eine der fünf Anweisungen in einer einzelnen Zeile eine Ausnahme auslöst?
Ihre Stapelverfolgung sagt "EBlah in Zeile N" ... und jetzt haben Sie keine Ahnung, welche dieser fünf Anweisungen die Ausnahme ausgelöst hat.
(Dasselbe passiert mit einer übermäßig langen Aussage jeglicher Art.)
quelle
foo.bar[grill.boo].flip.flap[flop].mickey(minnie).marshmallow
(Java / C # -Syntax) verlieren . Das Durchsuchen dieser Art von Chaos ist immer besser mit zusätzlichen Zeilen (und temporären Variablen… und einem 2D6-Hinweis für den ursprünglichen Entwickler).One-Statement-per-Line ist ein weit verbreiteter Codierungsstil. Infolgedessen werden die meisten Entwickler, die sich Ihren Code in Zukunft ansehen, wahrscheinlich zusammenzucken, wenn sie mehrere Anweisungen pro Zeile sehen. Wenn Sie es gewohnt sind, etwas so zu sehen, kann es verwirrend sein, es anders zu sehen.
Aus diesem Grund rate ich davon ab, außer in seltenen Fällen.
quelle
Ich habe dies vor 25 Jahren zum letzten Mal getan, indem ich interpretierte Sprachen auf kleinen Mikros mit niedrigen Taktraten verwendet habe, wobei jeder Leerzeichen- oder Wagenrücklauf eine Leistungssteigerung zur Folge hatte.
Ich zucke jetzt bei dem Gedanken daran zusammen (obwohl es aus einem guten Grund getan wurde).
Leider ist ein solcher Code schwer zu lesen und daher schwer zu pflegen.
quelle
Syntaktisch ist daran wirklich nichts auszusetzen. Es hängt wirklich vom Codierungsstil Ihres Teams ab.
Da der größte Teil des Codes, den ich gesehen habe (einschließlich des Codes, der sich in den Standard-C ++ - Headern befindet), auf diese Weise erstellt wurde, würde ich Ihre erste Methode verwenden.
quelle
Dies ist ein wirklich ungewöhnlicher Codierungsstil.
Ich würde Ihnen empfehlen, stattdessen leere Zeilen zu verwenden, um logische Teile des Codes abzugrenzen.
quelle
Wenn Sie zu weit nach rechts gehen, können genauso viele Probleme auftreten wie bei mehreren Zeilen.
Ich musste mich mit einigen SQL-Anweisungen mit Dutzenden von Feldern befassen. Normalerweise würde ich eine pro Zeile einfügen, aber in einigen Fällen habe ich 3 oder 4 zu einer Zeile zusammengefasst. Dies scheint eine gute Idee während der Entwicklung zu sein, wenn Sie mehrmals nach oben und unten scrollen müssen.
Ich bedauere, zu diesem Code zurückgekehrt zu sein. Zusätzliche Zeilen zu haben, scheint einfach kein so großes Problem zu sein, deshalb räume ich es normalerweise auf.
quelle
Nachdem er eine Minute lang die Hände auf den Kopf gelegt hat, verwendet er die bevorzugten IDE Regex-Funktionen, um den gesamten unlesbaren Code automatisch in eine Anweisung pro Zeile zu unterteilen.
Ein kurzer Blick auf das Beispiel, das Sie gezeigt haben, reicht aus, um zu verstehen, wie viel lesbarer der zweite Ansatz ist.
Es ist viel einfacher, dem vertikalen Seitenfluss zu folgen, ohne dass sich Ihre Augen für immer horizontal bewegen müssen.
Schauen Sie sich Ihr Beispiel an: Sie wissen sofort, dass sich der Code ausschließlich auf die
Text
Eigenschaften verschiedenertextBox
Objekte bezieht und diese Zeichenfolgen als Werte enthalten. Ziemlich einfach.quelle
Ich persönlich würde einen solchen Stil nicht verwenden. Zusammenfassen
Vorteile
Nachteile
quelle
if (x > maxX) {x=maxX; peggedAny = true;}
. Wenn jede solche Operation leicht in eine einzelne Zeile passt, hätte ich lieber acht solche Zeilen als Dutzende von Zeilen, die die Anweisungen aufteilen. Wenn solche Vergleiche an genügend Stellen verwendetpeggedAny |= pegValueMinMax(ref x, minX, maxX);
würden, wären möglicherweise vier Aussagen des Formulars besser, aber jemand, der dies liest, müsste lesen, umpegValueMinMax
zu sehen, was es tut.