Ich habe danach gesucht, konnte aber keine Antwort finden und aus irgendeinem Grund schämte ich mich zu sehr, um Professor zu fragen, aufgrund des Gefühls, wenn Hunderte von Menschen Sie anstarren ...
Wie auch immer, meine Frage ist, wie wichtig es ist, Klammern zu haben. Ist es in Ordnung, wenn ich sie weglasse? Beispiel:
for (int i = 0; i < size; i++) {
a += b;
}
vs.
for (int i = 0; i < size; i++)
a += b;
Ich weiß, dass beide funktionieren werden, aber wenn ich die Klammern weglasse (was ich aufgrund der Sichtbarkeit häufig mache), ändert sich dadurch überhaupt etwas? Wie gesagt, ich weiß, dass es funktioniert, ich habe es ein Dutzend Mal getestet, aber jetzt werden einige meiner Uni-Aufgaben größer, und aus irgendeinem Grund habe ich irrationale Angst, dass dies auf lange Sicht einige Probleme verursacht? Gibt es einen Grund, das zu befürchten?
quelle
Antworten:
Es ändert nichts außer der Wartbarkeit Ihres Codes. Ich habe Code wie diesen gesehen:
was bedeutet dies:
... aber was hätte das sein sollen:
Persönlich füge ich immer die Klammern hinzu, um Verwechslungsgefahr beim Lesen oder Ändern des Codes zu vermeiden.
Die Codierungskonventionen in jedem Unternehmen, für das ich gearbeitet habe, haben dies verlangt - was nicht heißt, dass einige andere Unternehmen keine anderen Konventionen haben ...
Und nur für den Fall, dass Sie denken, dass es niemals einen Unterschied machen würde: Ich musste einmal einen Fehler beheben, der dem obigen Code ziemlich gleichwertig war. Es war bemerkenswert schwer zu erkennen ... (zugegebenermaßen war dies Jahre her, bevor ich mit Unit-Tests begonnen hatte, was die Diagnose zweifellos einfacher gemacht hätte).
quelle
Durch die Verwendung von geschweiften Klammern wird der Code wartbarer und verständlicher. Sie sollten sie daher standardmäßig berücksichtigen .
Manchmal überspringe ich die Verwendung von geschweiften Klammern an Schutzklauseln , um den Code kompakter zu gestalten. Meine Voraussetzung dafür ist, dass es sich um
if
Anweisungen handelt, auf die eine Sprunganweisung folgt , wiereturn
oderthrow
. Außerdem halte ich sie in derselben Zeile, um die Aufmerksamkeit auf die Redewendung zu lenken, z.Sie gelten auch für Code in Schleifen:
Und zu anderen Sprungbedingungen von Methoden, die nicht unbedingt oben im Methodenkörper stehen.
Einige Sprachen (wie Perl oder Ruby) haben eine Art bedingte Anweisung , bei der geschweifte Klammern nicht zutreffen:
Ich halte es für äquivalent zu dem, was ich gerade beschrieben habe, aber ausdrücklich von der Sprache unterstützt.
quelle
Es gibt keinen Unterschied. Das Hauptproblem bei der zweiten Version ist, dass Sie möglicherweise Folgendes schreiben:
Wenn Sie diese Methode aktualisieren, denken Sie, dass
do_something_else()
sie innerhalb der Schleife aufgerufen wird. (Und das führt zu Head-Scratching-Debug-Sitzungen.)Es gibt ein zweites Problem, das die Zahnspangenversion nicht hat und das möglicherweise noch schwerer zu erkennen ist:
Behalten Sie also die Zahnspange, es sei denn, Sie haben einen guten Grund, es sind nur ein paar Tastenanschläge mehr.
quelle
Ich denke, dass es gut ist, geschweifte Klammern zu verlieren, wenn Sie auch das automatische Format verwenden, da Ihre Einrückung immer korrekt ist, sodass Fehler auf diese Weise leicht erkannt werden können.
Zu sagen, dass es schlecht, seltsam oder unlesbar ist, die geschweiften Klammern wegzulassen, ist einfach falsch, da die ganze Sprache auf dieser Idee basiert und ziemlich beliebt ist (Python).
Aber ich muss sagen, dass es ohne Verwendung eines Formatierers gefährlich sein kann.
quelle
In den meisten Fällen sind die bisher genannten Antworten korrekt. Aus sicherheitstechnischer Sicht gibt es jedoch einige Nachteile. Sicherheit, die in einem Zahlungsteam gearbeitet hat, ist ein viel stärkerer Faktor, der solche Entscheidungen motiviert. Nehmen wir an, Sie haben den folgenden Code:
Angenommen, Sie haben diesen Code, der aufgrund eines internen Problems nicht funktioniert. Sie möchten die Eingabe überprüfen. Sie nehmen also folgende Änderung vor:
Angenommen, Sie beheben das Problem und stellen diesen Code bereit (und möglicherweise den Prüfer, und Sie glauben, dass dies kein Problem verursacht, da es sich nicht im Zustand "Prod" befindet). Auf magische Weise drucken Ihre Produktionsprotokolle jetzt Kundenkreditkarteninformationen, die für alle Mitarbeiter sichtbar sind, die die Protokolle sehen können. Gott bewahre, wenn einer von ihnen (mit böswilliger Absicht) diese Daten erhält.
Das Fehlen einer Klammer und ein wenig nachlässiges Codieren kann daher häufig zu einem Verstoß gegen sichere Informationen führen. Es wird auch von CERT - Software Engineering Institure, CMU als Sicherheitslücke in JAVA eingestuft .
quelle
Wenn Sie eine einzelne Anweisung haben, können Sie die Klammern weglassen. Für die Deklaration eines Codeblocks ist mehr als eine Anweisung erforderlich.
Wenn Sie Klammern verwenden, deklarieren Sie einen Codeblock:
Die Klammern sollten auch mit nur einer Anweisung verwendet werden, wenn Sie sich in einer Situation verschachtelter Anweisungen befinden, um die Lesbarkeit zu verbessern. Beispiel:
es ist besser lesbar in Klammern geschrieben, auch wenn es nicht nötig ist:
quelle
Wenn Sie Klammern verwenden, ist Ihr Code besser lesbar. Wenn Sie einen Operator im selben Block hinzufügen müssen, können Sie mögliche Fehler vermeiden
quelle
Durch die Verwendung der Klammern schützt der Code die Zukunft vor späteren Änderungen. Ich habe Fälle gesehen, in denen Klammern weggelassen wurden und jemand später Code hinzufügte und die Klammern zu diesem Zeitpunkt nicht einfügte. Das Ergebnis war, dass der hinzugefügte Code nicht in den Abschnitt ging, von dem sie dachten, dass er es tat. Ich denke, die Antwort ist, dass es angesichts zukünftiger Änderungen des Codes eine gute Praxis ist. Ich habe gesehen, dass Softwaregruppen dies als Standard übernehmen, dh aus diesem Grund auch bei einzeiligen Blöcken immer Klammern benötigen.
quelle
Mehr Unterstützung für die Gruppe "Immer Klammern" von mir. Wenn Sie geschweifte Klammern für Schleifen / Zweige mit einer Anweisung weglassen, setzen Sie die Anweisung in dieselbe Zeile wie die Steueranweisung.
Auf diese Weise ist es schwieriger, das Einsetzen von Zahnspangen zu vergessen, wenn der Körper erweitert wird. Verwenden Sie trotzdem Locken.
quelle
Die Verwendung redundanter Klammern, um zu behaupten, dass Code besser zu warten ist, wirft die folgende Frage auf: Wenn die Leute, die den Code schreiben, sich darüber wundern und ihn weiter pflegen, Probleme wie die zuvor beschriebenen haben (Einrückung oder Lesbarkeit), sollten sie vielleicht überhaupt nicht programmieren. .
quelle
Ergebnis weise ist es das gleiche.
Nur zwei Dinge zu beachten.
- Code-Wartbarkeit
- Locker gekoppelter Code. (Möglicherweise wird etwas anderes ausgeführt, da Sie den Bereich für die Schleife nicht angegeben haben.)
Hinweis: In meiner Beobachtung, wenn es sich um eine Schleife in einer Schleife handelt. Inner Loop ohne Klammern ist ebenfalls sicher. Ergebnis wird nicht variieren.
quelle
Wenn Sie nur eine Anweisung in der Schleife haben, ist diese dieselbe.
Siehe zum Beispiel den folgenden Code:
Wir haben nur eine Aussage im obigen Code. also kein problem
Hier haben wir zwei Anweisungen, aber nur die erste Anweisung kommt in die Schleife, nicht aber die zweite Anweisung.
Wenn Sie mehrere Anweisungen in einer einzigen Schleife haben, müssen Sie geschweifte Klammern verwenden.
quelle
Wenn Sie geschweifte Klammern entfernen, wird nur die erste Anweisungszeile gelesen. Zusätzliche Zeilen werden nicht gelesen. Wenn Sie mehr als eine Befehlszeile ausführen müssen, verwenden Sie bitte eine geschweifte Klammer - andernfalls wird eine Ausnahme ausgelöst.
quelle
Heutzutage ist es sehr einfach, Codes erneut einzurücken, um herauszufinden, welcher Codeblock sich in welchem
if
oderfor
/ befindetwhile
. Wenn Sie darauf bestehen, dass ein erneutes Einrücken schwierig ist, können Klammern mit falschem Einzug Sie ebenso verwirren.Wenn Sie dies überall tun, wird Ihr Gehirn in kürzester Zeit zusammenbrechen. Selbst bei Klammern sind Sie auf Einrückungen angewiesen, um den Anfang und das Ende von Codeblöcken visuell zu finden.
Wenn das Einrücken wichtig ist, sollten Sie Ihren Code bereits in korrektem Einzug schreiben, damit andere Personen Ihre Codes nicht erneut einrücken müssen, um richtig zu lesen.
Wenn Sie argumentieren möchten, dass das vorherige Beispiel zu falsch / absichtlich ist und dass die Klammern dazu dienen, unachtsame Einrückungsprobleme zu erfassen (insbesondere beim Kopieren / Einfügen von Codes), sollten Sie Folgendes berücksichtigen:
Ja, es sieht weniger ernst aus als im vorherigen Beispiel, aber Sie können durch solche Einrückungen immer noch verwirrt werden.
IMHO liegt es in der Verantwortung der Person, die den Code schreibt, den Code zu überprüfen und sicherzustellen, dass die Dinge korrekt eingerückt sind, bevor sie andere Dinge tun.
quelle
Es sollte ein Reflex sein, auch den Code neu zu formatieren ... das ist natürlich für professionelle Programmierer in professionellen Teams
quelle
Es ist wahrscheinlich am besten, die geschweiften Klammern überall zu verwenden, weil das Debuggen ein extremes Ärgernis wäre. Andernfalls benötigt eine Codezeile nicht unbedingt die Klammer. Hoffe das hilft!
quelle