Ich habe Code wie diesen gesehen:
if(statement)
do this;
else
do this;
Ich denke jedoch, dass dies besser lesbar ist:
if(statement){
do this;
}else{
do this;
}
Da beide Methoden funktionieren, ist dies einfach eine Frage der Präferenz, die verwendet werden soll, oder wird ein Weg dem anderen empfohlen?
if-statement
coding-style
curly-braces
Jerebear
quelle
quelle
Antworten:
Das Problem mit der ersten Version besteht darin, dass Ihr Code auf unerwartete und amüsante Weise unterbrochen wird, wenn Sie zurückgehen und den if- oder else-Klauseln eine zweite Anweisung hinzufügen, ohne daran zu denken, die geschweiften Klammern hinzuzufügen.
In Bezug auf die Wartbarkeit ist es immer klüger, die zweite Form zu verwenden.
EDIT: Ned weist in den Kommentaren darauf hin, aber ich denke, es lohnt sich auch, hier darauf zu verlinken. Dies ist nicht nur ein hypothetischer Bullshit aus dem Elfenbeinturm: https://www.imperialviolet.org/2014/02/22/applebug.html
quelle
if (…) { goto L; goto L; }
sondern die geschweiften Klammern vergessen hat. Es ist rein zufällig, dass `` if (…) {goto L; gehe zu L; } `ist zufällig kein Sicherheitsfehler, da es sich immer noch um einen Fehler handelt (nur keinen mit Sicherheitsfolgen). In einem anderen Beispiel könnten die Dinge in die entgegengesetzte Richtung gehen und der spannerlose Code könnte versehentlich sicher sein. In einem dritten Beispiel wäre der Code ohne Klammern anfangs fehlerfrei und der Entwickler würde beim Hinzufügen der Klammern einen Tippfehler einführen.Ein Problem beim Weglassen von Anweisungsblöcken ist die else-Ambiguität. Das heißt, C-inspirierte Sprachen ignorieren Einrückungen und haben daher keine Möglichkeit, dies zu trennen:
Davon:
quelle
else
bindet gierig an das nächste, innersteif
. Das Problem tritt auf, wenn C oder ähnliche Sprachen von Leuten codiert werden, die dies nicht wissen, nicht darüber nachdenken oder noch nicht genug Kaffee haben - also schreiben sie Code, von dem sie glauben, dass er eine Sache tun wird, aber die Laut Sprachspezifikation muss der Parser etwas anderes tun, was sehr unterschiedlich sein kann. Und ja, das ist ein weiteres grundsolides Argument dafür, Klammern immer einzuschließen, auch wenn die Grammatik sie als theoretisch "unnötig" kennzeichnet.Mein allgemeines Muster lautet: Wenn es in eine Zeile passt, mache ich Folgendes:
Wenn es eine else-Klausel gibt oder wenn der Code, für den ich ausführen möchte, eine
true
erhebliche Länge hat, setzen Sie die Klammern ganz durch:Letztendlich kommt es auf ein subjektives Problem von Stil und Lesbarkeit an. Die allgemeine Programmierwelt teilt sich jedoch ziemlich stark in zwei Parteien (für Sprachen, die geschweifte Klammern verwenden): Verwenden Sie sie entweder ausnahmslos die ganze Zeit oder mit Ausnahmen die ganze Zeit. Ich bin Teil der letzteren Gruppe.
quelle
if(true){ do_something(); }
, warum sollten Sie die Chance nutzen, dass ein anderer Programmierer später einen schwerwiegenden Fehler einführt (siehe Apples "goto fail" Total SSL Code Screwup).Ich verwende den Code-Formatierer der von mir verwendeten IDE. Das kann abweichen, kann aber in den Einstellungen / Optionen eingerichtet werden.
Ich mag dieses:
quelle
Die "Regel", der ich folge, lautet:
Wenn die "if" -Anweisung getestet wird, um etwas zu tun (IE-Aufruffunktionen, Konfigurieren von Variablen usw.), verwenden Sie geschweifte Klammern.
Dies liegt daran, dass Sie meiner Meinung nach klarstellen müssen, welche Funktionen aufgerufen werden und wohin der Programmfluss unter welchen Bedingungen geht. Es ist wichtig, dass der Programmierer genau versteht, welche Funktionen aufgerufen werden und welche Variablen in diesem Zustand festgelegt sind, damit er genau versteht, was Ihr Programm tut.
Wenn die "if" -Anweisung getestet wird, um etwas zu stoppen (IE-Flusssteuerung innerhalb einer Schleife oder Funktion), verwenden Sie eine einzelne Zeile.
In diesem Fall ist es für den Programmierer wichtig, schnell zu erkennen, in welchen Ausnahmefällen der Code nicht ausgeführt werden soll. Dies wird in $ test und nicht im Ausführungsblock behandelt.
quelle
Wenn Sie die Zahnspange vom ersten Moment an haben, sollten Sie verhindern, dass Sie dies jemals debuggen müssen:
quelle
;
:)Verwenden Sie geschweifte Klammern für alle if-Anweisungen, auch für einfache. Oder schreiben Sie eine einfache if-Anweisung neu, um den ternären Operator zu verwenden:
Sieht viel schöner aus:
Verwenden Sie den ternären Operator jedoch nur, wenn Sie absolut sicher sind, dass in den if / else-Blöcken nichts anderes enthalten sein muss!
quelle
Ich benutze lieber Zahnspangen. Das Hinzufügen von geschweiften Klammern erleichtert das Lesen und Ändern.
Hier sind einige Links für die Verwendung von Zahnspangen:
Bevorzugen Sie Multiline, wenn
Zahnspangen weglassen: Nicht nur eine Frage des Stils
Paketüberfluss
quelle
Nach meiner Erfahrung ist der einzige (sehr) geringfügige Vorteil des ersten Formulars die Lesbarkeit des Codes, das zweite Formular fügt "Rauschen" hinzu.
Bei modernen IDEs und Code-Autogeneration (oder Autocompletion) empfehle ich jedoch dringend, das zweite Formular zu verwenden. Sie werden keine zusätzliche Zeit damit verbringen, geschweifte Klammern einzugeben, und Sie werden einige der häufigsten Fehler vermeiden.
Es gibt genug energieaufwendige Fehler, die Leute sollten einfach keine Türen für große Zeitverschwendung öffnen.
Eine der wichtigsten Regeln beim Schreiben von Code ist die Konsistenz. Jede Codezeile sollte auf die gleiche Weise geschrieben werden, egal wer sie geschrieben hat. Strenge Verhinderung verhindert, dass Fehler "auftreten";)
Dies gilt auch für die eindeutige und explizite Benennung Ihrer Variablen, Methoden, Dateien oder für das korrekte Einrücken ...
Wenn meine Schüler diese Tatsache akzeptieren, hören sie auf, gegen ihren eigenen Quellcode zu kämpfen, und beginnen, das Codieren als eine wirklich interessante, anregende und kreative Aktivität zu betrachten. Sie fordern ihren Verstand heraus, nicht ihre Nerven!
quelle
Es ist eine Frage der Präferenz. Ich persönlich verwende beide Stile. Wenn ich mir ziemlich sicher bin, dass ich keine weiteren Anweisungen hinzufügen muss, verwende ich den ersten Stil, aber wenn dies möglich ist, verwende ich den zweiten. Da Sie dem ersten Stil keine weiteren Aussagen hinzufügen können, habe ich gehört, dass einige Leute davon abraten, ihn zu verwenden. Bei der zweiten Methode ist jedoch eine zusätzliche Codezeile erforderlich. Wenn Sie (oder Ihr Projekt) diese Art von Codierungsstil verwenden, wird die erste Methode für einfache if-Anweisungen sehr bevorzugt:
Ich denke jedoch, dass die beste Lösung für dieses Problem in Python ist. Mit der Whitespace-basierten Blockstruktur haben Sie nicht zwei verschiedene Methoden zum Erstellen einer if-Anweisung: Sie haben nur eine:
Während dies das "Problem" hat, dass Sie die geschweiften Klammern überhaupt nicht verwenden können, erhalten Sie den Vorteil, dass der erste Stil keine Zeilen mehr enthält und die Möglichkeit besteht, weitere Anweisungen hinzuzufügen.
quelle
Ich habe immer versucht, meinen Code zum Standard zu machen und ihm so nahe wie möglich zu kommen. Dies erleichtert anderen das Lesen, wenn sie für die Aktualisierung verantwortlich sind. Wenn Sie Ihr erstes Beispiel machen und in der Mitte eine Zeile hinzufügen, schlägt dies fehl.
Funktioniert nicht:
if (Anweisung) dies tun; und das; sonst mach das;
quelle
Persönlich verwende ich den ersten Stil nur, um eine Ausnahme auszulösen oder vorzeitig von einer Methode zurückzukehren. Wie Argument Prüfen am Anfang einer Funktion, weil ich in diesen Fällen selten mehr als eine Sache zu tun habe und es nie eine andere gibt.
Beispiel:
Ansonsten benutze ich den zweiten Stil.
quelle
Meine persönliche Präferenz ist die Verwendung einer Mischung aus Leerzeichen und Klammern wie folgt:
Ich denke, das sieht sauber aus und macht meinen Code sehr einfach zu lesen und vor allem - Debuggen.
quelle
Ich stimme den meisten Antworten darin zu, dass es besser ist, in Ihrem Code explizit zu sein und geschweifte Klammern zu verwenden. Persönlich würde ich eine Reihe von Codierungsstandards übernehmen und sicherstellen, dass jeder im Team sie kennt und sich anpasst. Wo ich arbeite, verwenden wir von IDesign.net veröffentlichte Codierungsstandards für .NET-Projekte.
quelle
Ich ziehe es vor, eine geschweifte Klammer zu setzen. Aber manchmal hilft der ternäre Operator.
Anstatt :
Man sollte einfach tun:
int x = condition ? 30 : 20;
Stellen Sie sich auch einen Fall vor:
Es wäre viel besser, wenn Sie die geschweifte Klammer einsetzen.
quelle