Ich habe einmal gehört, dass das Belassen der geschweiften Klammern in einzeiligen Anweisungen in JavaScript schädlich sein kann. Ich erinnere mich nicht mehr an die Argumentation und eine Google-Suche hat nicht viel geholfen.
Gibt es etwas, das es zu einer guten Idee macht, alle Anweisungen in geschweiften Klammern in JavaScript zu umgeben?
Ich frage, weil jeder das zu tun scheint.
javascript
Turm
quelle
quelle
Antworten:
Nein
Aber sie werden empfohlen. Wenn Sie die Anweisung jemals erweitern, benötigen Sie sie.
Dies ist vollkommen gültig
Es wird jedoch dringend empfohlen, immer geschweifte Klammern zu verwenden, da dies erforderlich ist, wenn Sie (oder eine andere Person) die Anweisung jemals erweitern.
Dieselbe Vorgehensweise gilt für alle Sprachen im C-Syntaxstil mit geschweiften Klammern. C, C ++, Java und sogar PHP unterstützen eine einzeilige Anweisung ohne geschweifte Klammern. Sie müssen sich darüber im Klaren sein, dass Sie nur zwei Zeichen speichern und mit den Klammerstilen einiger Leute nicht einmal eine Zeile speichern. Ich bevorzuge einen vollständigen Zahnspangenstil (wie folgt), daher ist er tendenziell etwas länger. Der Kompromiss wird sehr gut mit der Tatsache erfüllt, dass Sie eine extrem klare Lesbarkeit des Codes haben.
quelle
Es gibt einen Lesbarkeitsaspekt: Wenn Sie zusammengesetzte Anweisungen haben, kann dies sehr verwirrend sein. Das Einrücken hilft, bedeutet aber für den Compiler / Interpreter nichts.
Und dann gibt es noch einen Erweiterungsaspekt:
Wenn Sie immer die Klammern haben, müssen Sie andere Anweisungen in diesen Block einfügen.
quelle
if (a===true) alert(a);
. Jetzt ist es klar!Die Frage fragt nach Aussagen in einer Zeile. Die vielen Beispiele zeigen jedoch Gründe, Klammern, die auf mehrzeiligen Anweisungen basieren, nicht wegzulassen. Es ist absolut sicher, keine Klammern in einer Zeile zu verwenden, wenn dies der von Ihnen bevorzugte Codierungsstil ist.
In der Frage wird beispielsweise gefragt, ob dies in Ordnung ist:
Es wird nicht gefragt, ob dies in Ordnung ist:
Ich denke, es ist vorzuziehen, Klammern wegzulassen, da dadurch der Code mit weniger überflüssiger Syntax besser lesbar wird.
Mein Codierungsstil besteht darin, niemals Klammern zu verwenden, es sei denn, der Code ist ein Block. Und niemals mehrere Anweisungen in einer einzigen Zeile zu verwenden (durch Semikolons getrennt). Ich finde das einfach zu lesen und zu klären und habe nie Probleme mit dem Umfang von If-Aussagen. Die Verwendung von Klammern für eine einzelne if-Bedingungsanweisung würde daher 3 Zeilen erfordern. So was:
Die Verwendung einer if-Anweisung mit einer Zeile ist vorzuziehen, da sie weniger vertikalen Raum benötigt und der Code kompakter ist.
Ich würde andere nicht zwingen, diese Methode zu verwenden, aber sie funktioniert für mich und ich könnte den Beispielen nicht widersprechen, wie das Weglassen von Klammern zu Codierungs- / Bereichsfehlern führt.
quelle
/*eslint curly: ["error", "multi"]*/
Technisch nein aber sonst absolut ja !!!
Vergessen Sie "Es ist Ihre persönliche Präferenz", "Der Code läuft einwandfrei", "Es hat bei mir gut funktioniert", "Es ist besser lesbar" yada yada BS. Dies kann leicht zu sehr ernsten Problemen führen, wenn Sie einen Fehler machen und glauben Sie mir, dass es sehr leicht ist, beim Codieren einen Fehler zu machen (Glauben Sie nicht? Schauen Sie sich den berühmten Apple Go to Fail-Fehler an ).
Argument: "Es ist persönliche Präferenz"
Nein ist es nicht. Es sei denn, Sie sind ein Ein-Mann-Team, das am Mars abreist, nein. Die meiste Zeit werden andere Leute Ihren Code lesen / ändern. In jedem seriösen Codierungsteam ist dies der empfohlene Weg, daher handelt es sich nicht um eine "persönliche Präferenz".
Argument: "Der Code läuft einwandfrei"
Der Spaghetti-Code auch! Bedeutet das, dass es in Ordnung ist, es zu erstellen?
Argument: "Es hat gut für mich funktioniert"
In meiner Karriere habe ich so viele Fehler gesehen, die aufgrund dieses Problems entstanden sind. Sie erinnern sich wahrscheinlich nicht daran, wie oft Sie das
'DoSomething()'
Warum kommentiert und verblüfft haben'SomethingElse()'
:Oder 'SomethingMore' hinzugefügt und nicht bemerkt, dass es nicht aufgerufen wird (obwohl der Einzug etwas anderes impliziert):
Hier ist ein Beispiel aus dem wirklichen Leben, das ich hatte. Jemand wollte die gesamte Protokollierung deaktivieren, damit find & replace
"console.log"
=> ausgeführt wird//"console.log"
:Sehen Sie das Problem?
Selbst wenn Sie denken, "diese sind so trivial, würde ich das niemals tun"; Denken Sie daran, dass es immer ein Teammitglied mit schlechteren Programmierkenntnissen als Sie geben wird (hoffentlich sind Sie nicht der schlechteste im Team!)
Argument: "es ist besser lesbar"
Wenn ich etwas über Programmierung gelernt habe, werden die einfachen Dinge sehr schnell sehr komplex. Es ist sehr häufig, dass dies:
wird nach dem Testen mit verschiedenen Browsern / Umgebungen / Anwendungsfällen oder dem Hinzufügen neuer Funktionen zu Folgendem:
Und vergleiche es damit:
PS: Bonuspunkte gehen an diejenigen, die den Fehler im obigen Beispiel bemerkt haben.
quelle
Es gibt kein Wartbarkeitsproblem!
Das Problem bei Ihnen allen ist, dass Sie überall Semikolons einfügen. Für mehrere Anweisungen benötigen Sie keine geschweiften Klammern. Wenn Sie eine Anweisung hinzufügen möchten, verwenden Sie einfach Kommas.
Dies ist ein gültiger Code, der wie erwartet ausgeführt wird!
quelle
if
,else
undalert
nichtIf
,Else
undAlert
?if
und(
wieif(true) doSomething();
Es gibt keinen Programmiergrund, die geschweiften Klammern in einzeiligen Anweisungen zu verwenden.
Dies hängt nur von den Vorlieben und der Lesbarkeit der Codierer ab.
Ihr Code wird dadurch nicht beschädigt.
quelle
Zusätzlich zu dem von @Josh K genannten Grund (der auch für Java, C usw. gilt) ist ein spezielles Problem in JavaScript das automatische Einfügen von Semikolons . Aus dem Wikipedia-Beispiel:
Dies kann also auch zu unerwarteten Ergebnissen führen, wenn es wie folgt verwendet wird:
Es ist nicht viel besser zu schreiben
aber vielleicht ist der Fehler hier etwas leichter zu erkennen (?)
quelle
Es ist eine Frage des Stils, aber geschweifte Klammern sind gut, um mögliche baumelnde andere zu verhindern .
quelle
Es gibt viele gute Antworten, daher werde ich nicht wiederholen, außer um meine „Regel“ zu sagen, wenn Klammern weggelassen werden können: unter Bedingungen, die als einzige Aussage „zurückkehren“ oder „werfen“ (z. B.) sind . In diesem Fall ist der Flusskontrolle bereits klar, dass sie beendet wird:
Sogar der „schlechte Fall“ kann aufgrund der abschließenden Flusskontrolle schnell identifiziert (und behoben) werden. Diese Konzept- / Strukturregel gilt auch für eine Reihe von Sprachen.
Dies ist natürlich auch der Grund, warum man einen Linter verwenden könnte.
quelle
Hier ist, warum es empfohlen wird
Nehmen wir an, ich schreibe
Dann kommt der nächste Entwickler und sagt "Oh, ich muss noch etwas tun", also schreiben sie
Wie Sie jetzt sehen können, ist "AlsoTrue" immer wahr, da der erste Entwickler keine geschweiften Klammern verwendet hat.
quelle
Ich arbeite gerade an einem Minifier. Sogar jetzt überprüfe ich es auf zwei riesigen Skripten. Experimentell habe ich herausgefunden: Sie können die geschweiften Klammern hinter sich entfernen, wenn, sonst, während, Funktion *, wenn die geschweiften Klammern nicht ';', 'return', 'for', 'if', 'else', enthalten. 'while', 'do', 'function'. Unabhängig von Zeilenumbrüchen.
Natürlich müssen Sie die schließende Klammer durch ein Semikolon ersetzen, wenn sie nicht von einer anderen schließenden Klammer gefolgt wird.
Eine Funktion darf nicht mit einem Komma enden.
Getestet auf Chrome und FF.
quelle
Hab das immer gefunden
ist leichter für mein Auge als
auch bedingt wie
sind leichter zu lesen (meine persönliche Meinung) als
aber ich denke, es kommt auf den Codierungsstil an
quelle
Die Frage wird nicht direkt beantwortet, aber unten finden Sie eine kurze Syntax über die if-Bedingung in einer Zeile
Ex:
Kann so geschrieben werden:
quelle
Es gibt viele Probleme in Javascript. Schauen Sie sich den JavaScript-Architekten Douglas Crockford an, der darüber spricht. Die if- Anweisung scheint in Ordnung zu sein, aber die return- Anweisung kann ein Problem verursachen.
quelle
Ich fand diese Antwort auf der Suche nach einer ähnlichen Erfahrung und beschloss, sie mit meiner Erfahrung zu beantworten.
Bracketless-Anweisungen funktionieren in den meisten Browsern. Ich habe jedoch getestet, dass Bracketless-Methoden in einigen Browsern tatsächlich nicht funktionieren.
Ab dem 26. Februar 2018 funktioniert diese Anweisung in Pale Moon, nicht jedoch in Google Chrome.
quelle
Die anfängliche Einrückungsstufe einer Anweisung sollte der Anzahl der offenen Klammern darüber entsprechen. (ausgenommen zitierte oder kommentierte Klammern oder solche in Präprozessor-Direktiven)
Andernfalls wäre K & R ein guter Einrückungsstil. Um ihren Stil zu korrigieren, empfehle ich, kurze einfache if-Anweisungen in eine Zeile zu setzen.
anstatt
Wenn ich einen Editor schreiben würde, würde die Schaltfläche für das automatische Formatieren die Leiste bis zur gleichen Zeile wie foo saugen und die Klammern um die Leiste einfügen, wenn Sie die Eingabetaste wie folgt drücken:
Dann ist es einfach und konsistent, neue Anweisungen über oder unter der Leiste im Hauptteil der if-Anweisung hinzuzufügen
quelle
Manchmal scheinen sie gebraucht zu werden! Ich konnte es selbst nicht glauben, aber gestern kam mir in einer Firebug-Sitzung (kürzlich Firefox 22.0) der Gedanke, dass
ausgeführt etwas trotz my.condition.key war wahr . Klammern hinzufügen:
hat diese Angelegenheit behoben. Es gibt unzählige Beispiele, bei denen es anscheinend ohne Zahnspange funktioniert, aber in diesem Fall definitiv nicht.
Leute, die dazu neigen, mehr als eine Aussage in eine Zeile zu setzen, sollten auf jeden Fall immer geschweifte Klammern verwenden, weil Dinge wie
sind schwer zu finden.
quelle
Ich möchte nur darauf hinweisen, dass Sie die geschweiften Klammern auch nur von den anderen weglassen können. Wie in diesem Artikel von John Resig zu sehen .
quelle
else
Klammer, um der Verwendung der Klammer zu entsprechen. In diesem Beispiel wären die Klammern auf demelse
Block erforderlich, um eine Codeüberprüfung zu bestehen. [1]: wiki.qt.io/Qt_Coding_Style#BracesEs gibt eine Möglichkeit, mehrzeilige, nicht geschweifte Klammern zu erreichen, wenn Anweisungen .. (Wow was Englisch ..), aber es ist ein bisschen langweilig:
quelle
if (true) funcName()
undelse return null