Gilt die else while
Wartung ohne dazwischenliegende Zahnspangen als "sicher"?
Schreiben von if-else
Code ohne geschweifte Klammern wie unten ...
if (blah)
foo();
else
bar();
... birgt ein Risiko, da das Fehlen von geschweiften Klammern es sehr einfach macht, die Bedeutung des Codes versehentlich zu ändern.
Ist unten aber auch riskant?
if (blah)
{
...
}
else while (!bloop())
{
bar();
}
Oder gilt else while
ohne dazwischenliegende Zahnspange "sicher"?
else while
sieht es eklig aus. Ich würde verwendenelse { while (condition) { ... } }
.if
wird nur einmal ausgewertet, zeigt aberwhile
eine Schleife an, so dass ich durch das Verbinden von beiden ein unbegründetes Gefühlif
else
Klausel das tunwhile
und etwas mehr tun wollen ? Verwenden Sie bitte nur Zahnspangen.Antworten:
Das erinnert mich an diesen Code:
Jedes Mal, wenn Sie zwei Arten von Blöcken kombinieren, geschweifte Klammern vergessen und die Einrückung nicht erhöhen, erstellen Sie Code, der nur schwer zu verstehen und zu warten ist.
quelle
Vielleicht liegt es daran, dass ich meinen Beruf (vor langer Zeit ) mithilfe der Jackson-Entity-Structure-Diagram- Methode gelernt habe , aber ich bin der Ansicht, dass der einzig richtige nicht umrahmte Begriff nach einem
if
oder einemelse
ein nachfolgender istif
(dh eineelse if
Leiter zulassen ).Alles andere (kein Wortspiel beabsichtigt) kann zu Missverständnissen und / oder Wartungsproblemen führen. Das ist der zentrale Aspekt der Idee des OP, "unsicher" zu sein.
Ich würde auch sehr käfig sein, wenn ich das
while()
in die gleiche Zeile wie daselse
- ob verspannt oder nicht - aufnehmen würde. Es liest sich für mich nicht richtig ... das Fehlen zusätzlicher Einrückungsmasken, die es ist, ist dieelse
Klausel. Und mangelnde Klarheit führt zu Missverständnissen (so).In diesem Beispiel würde ich (und in meinem Team darauf bestehen) dringend Folgendes empfehlen:
Natürlich würde ich auch passende Kommentare erwarten.
- Bearbeiten -
Vor kurzem litt Apple an einer SSL-Sicherheitsanfälligkeit, die durch einen schlechten Wartungsfix verursacht wurde und eine zweite Zeile zu einer nicht geschweiften einzelnen Zeile hinzufügte. Lassen Sie uns die Idee zu Bett bringen, dass ungerahmte einzelne Linien in Ordnung sind?
quelle
else while
gäbe, würde ich wahrscheinlich nicht einmal bemerken, dass es eine Schleife beim schnellen Überfliegen des Codes gibt, besonders wenn die gesuchte Bedingung vom if erfüllt wurde.else while
ohne Klammer dazwischen als „sicher“ ?Mir wurde immer beigebracht, alles in Klammern zu halten, eingerückt und kommentiert. Ich glaube, es ist viel einfacher, Fehler zu lesen und zu erkennen. Persönlich denke ich, dass Modularität der Schlüssel ist, also würde ich den Code immer so schreiben:
quelle
Ich würde Methode extrahieren und es machen
Siehe den auf der Refactoring-Katalog- Website erläuterten Ansatz "Methode extrahieren" :
quelle
Ich würde es als schlechte Angewohnheit betrachten, zu codieren. Manchmal funktioniert es einwandfrei und Sie werden kein Problem damit haben, den Code zu kompilieren und auszuführen. In anderen Fällen kann dies zu schwerwiegenden Fehlern führen, und Sie werden am Ende Stunden damit verbringen, diesen Fehler zu beheben.
Es wird immer empfohlen, Ihren Code zu modularisieren. Wenn Sie eine while-Schleife in einem anderen Teil einfügen müssen, setzen Sie sie in einen Block, damit andere beim Arbeiten an Ihrem Code die Logik leicht verstehen können.
Es ist eine gute Praxis, Code in Blöcken zu platzieren. Es macht es einfacher und einfacher zu verstehen und zu debuggen.
quelle
Es könnte in Ordnung sein, wenn es so einfach bleibt, obwohl es mir persönlich nicht gefällt und ich es vorziehe, selbst für die einfachsten if / else-Codeblöcke geschweifte Klammern zu verwenden. Es ist nur ordentlicher für mich.
Dies ist jedoch problematisch, wenn Sie geschachtelt haben, wenn / else einige mit geschweiften Klammern, andere ohne, durchläuft. Eine While-Schleife mitten in all den Spaghetti! Ich habe mit so schlechtem Code gearbeitet und es ist ein Albtraum, Fehler zu beheben und zu verstehen. Dies folgt ab dem ersten Punkt. Es ist in Ordnung, wenn es einfach bleibt und Sie damit zufrieden sind, aber dann kommen andere Programmierer und fügen Dinge hinzu, wahrscheinlich ein if else innerhalb der while-Schleife. Wenn es an erster Stelle sauber geschrieben ist, ist die Wahrscheinlichkeit geringer, dass dies geschieht.
Es geht darum, Dinge klar zu machen, damit andere Programmierer auf einen Blick erkennen können, was richtig und was falsch ist. Schreiben Sie den Code so, dass das Muster richtig aussieht und nicht ruckelt.
Die Kehrseite davon ist, dass ich vielleicht einige Leute sehen könnte, die behaupten, dass dies in bestimmten Fällen gut liest. Wenn ich die Ressource habe, die ich für die weitere Verarbeitung benötige, während ich auf etwas warte, tue dies. Auch dann gibt es für mich keinen Unterschied darin, die while-Schleife im else-Block zu verschachteln.
quelle
Nun, obwohl alle über die Verwendung von Zahnspangen streiten und sie zu lieben scheinen, bevorzuge ich eigentlich das Gegenteil. Ich benutze Klammern nur, wenn ich muss, weil ich sie ohne besser lesbar und prägnant finde.
... ich finde das wirklich "
else while(...)
" bemerkenswert lesbar! Es liest sich sogar wie normales Englisch! Aber ich denke, die Leute werden es alle seltsam finden, weil es gelinde gesagt ungewöhnlich ist.Letztendlich neigen wir alle dazu, es mit Zahnspangen idiotensicher zu machen ... weil, na ja, wissen Sie.
quelle
else while(...) bar();
etwas ändert wieelse while(...) foobar(); bar();
:)Ich setze immer geschweifte Klammern ein, nur weil Sie in Eile möglicherweise eine weitere Zeile einfügen, sie einrücken, die geschweiften Klammern vergessen und sich am Kopf kratzen, was gerade passiert. Ich halte die öffnende Klammer in der gleichen Zeile, aber es spielt keine Rolle. In beiden Fällen ist es besser, sie zu haben.
quelle
Was ist so falsch an geschweiften Klammern, dass so viele Menschen versuchen, es zu vermeiden, sie zu schreiben?
Welches Problem löst genau
else while
?Zahnspangen sind billig und gut, und sie machen die Code-Intention klar und deutlich im Gegensatz zu clever und witzig.
Zitieren der Unix-Philosophie:
Regel der Klarheit: Klarheit ist besser als Klugheit.
quelle
Es ist nichts falsch daran
als wäre nichts falsch daran
unter den richtigen Umständen (Ihre Umstände können variieren, aber dieser bestimmte Stil wird am besten verwendet, wenn Sie viel sich wiederholenden Code haben - dann ist die Ansicht jeder Zeile wichtiger als der stilistische Einzug)
Aber wenn Sie einen Weg wählen, bleiben Sie dabei - Konsistenz ist König. Ihr zweites Beispiel ist also sehr schlecht, da der if-Ausdruck eckige Klammern für seine Anweisung enthält und die while-Anweisung nicht außerhalb, sondern innerhalb der eckigen Klammern für die else-Klausel stehen sollte.
außerdem habe ich diesen Code schon mal gesehen:
und es wurde von der Kodierungsnorm nazi selbst geschrieben (der für alles auf Klammern bestand).
quelle
Moderne IDEs können einfach so konfiguriert werden, dass sie neu formatieren (einschließlich Entfernen oder Hinzufügen unnötiger Klammern) und / oder den Code beim Speichern einer Datei erneut einblenden. So würde Ihr Beispiel zum Beispiel automatisch aussehen
Durch die Einkerbung ist die Verschachtelung auch ohne unnötige Klammern immer gut sichtbar. Wenn Sie es also schaffen, solche IDE-Einstellungen durchzusetzen, sehe ich kein Risiko.
Persönlich finde ich Code, der die geschweiften Klammern und Zeilenumbrüche weglässt, viel lesbarer, da er Unordnung vermeidet:
Aber natürlich streiten sich viele Entwickler sehr gerne für immer und einen Tag über solche Dinge.
quelle