Hier ist ein Ausschnitt aus JavaScript-Code aus einem Tutorial, mit dem ich gearbeitet habe. Ich verstehe nicht, warum es nicht mit einer abschließenden else
-Klausel endet; Ich dachte, das wäre eine Regel.
Aus dem gleichen Grund, warum Sie nur eine einzige haben können, wenn:
%Vor% Es muss nicht, aus dem gleichen Grund ein if
allein erfordert kein else
.
Normalerweise ist es eine gute Idee, eine als "Catch-All" -Situation zu haben, aber der obige Code könnte geschrieben werden als:
%Vor%Im obigen Code könnte ich auch hinzufügen:
%Vor% Aber es ist völlig optional, dies zu tun. Es hängt davon ab, wie zuverlässig die Variable curScene
ist, ob ich sie persönlich hinzufügen würde oder nicht.
Betrachten Sie 3 Szenario
Szenario 1: Boolesche Bedingung
Angeben einer Bedingung wie sonst, wenn sie redundant wäre, und es ist für den Leser wirklich offensichtlich, was der Code tut. In diesem Fall gibt es kein Argument für die Verwendung von sonst.
Szenario 2: Unendliche Zustände
Hier sind wir daran interessiert, die Bedingungen A und B (und so weiter) zu testen, und vielleicht interessiert uns oder nicht, was passiert, wenn keiner von ihnen gilt:
%Vor% Der wichtige Punkt hier ist, dass es keine endliche Anzahl von gegenseitig ausschließenden Zuständen gibt, zum Beispiel: conditionA könnte num % 2 == 0
und conditionB könnte num % 3 == 0
sein.
Ich denke, es ist natürlich und wünschenswert, hier eine angemessene Anzahl von Zweigen zu verwenden; Wenn die Verzweigungen zu viele werden, könnte dies ein Hinweis darauf sein, dass eine vernünftige Verwendung des OO-Designs zu großen Verbesserungen der Wartbarkeit führen würde.
Szenario 3: Finite states
Dies ist der Mittelgrund zwischen den ersten beiden Fällen: Die Anzahl der Zustände ist endlich, aber mehr als zwei. Das Testen auf die Werte eines enumartigen Typs ist das archetypische Beispiel:
%Vor%In solchen Fällen ist es wahrscheinlich besser, einen Schalter zu verwenden, weil er dem Leser sofort mitteilt, dass die Anzahl der Zustände endlich ist und gibt einen starken Hinweis darauf, wo eine Liste aller möglichen Zustände gefunden werden könnte (in diesem Beispiel die Konstanten) mit CONSTANT_). Meine persönlichen Kriterien sind die Anzahl der Staaten, gegen die ich teste: Wenn es nur eine ist (sonst keine), werde ich ein if verwenden; Sonst ein Schalter. Auf jeden Fall werde ich in diesem Szenario kein anderes schreiben.
Anderenfalls als leeren catch-errors-Block hinzufügen
Dies steht in direktem Zusammenhang mit Szenario 2 oben. Wenn die möglichen Zustände zur Kompilierzeit nicht endlich und bekannt sind, können Sie nicht sagen, dass "in jedem anderen Fall" bedeutet, dass ein Fehler aufgetreten ist. Wenn sich ein Schalter, wie in Szenario 2, natürlicher anfühlt, habe ich das Gefühl, dass die Verwendung eines anderen Codes einen schlechten Code riecht.
Verwenden Sie stattdessen einen Schalter mit einer Standardverzweigung. Es wird Ihre Absicht viel deutlicher kommunizieren:
%Vor%Dies ist vielleicht etwas ausführlicher, aber dem Leser ist klar, wie der Code funktionieren soll. Meiner Meinung nach würde ein leerer else Block hier unnatürlich und rätselhaft aussehen.
else
ist ein default case
für die if
-Anweisung.
Wenn keine else
vorhanden ist, wird, wenn keine der Bedingungen in den Fällen if
oder else if
erfüllt ist, die Anweisung if
nichts tun.
Normalerweise ist es eine gute Übung, einen Standardfall zu haben, aber es gibt viele Fälle, wo es nicht notwendig ist und daher vom Code ausgeschlossen wird.
Wenn in diesem Fall curScene
etwas anderes als 1, 2, 3
ist, wird das Statement else
verwendet, aber da in anderen Fällen keine Verarbeitung stattfindet, hat der Coder kein else
eingefügt. .
Keine else-Klausel ist syntaktisch gut. MDN-Dokumentation Grundsätzlich wird der zweite if zum Hauptteil von das else, siehe Abschnitt "wie es aussehen würde, wenn die Verschachtelung richtig eingerückt wäre".
Ob es schlecht ist, denke ich, hängt von der Absicht ab. Wenn Sie die final else-Klausel nicht explizit definieren, können Sie am Ende einen Fehler bekommen, bei dem eine Bedingung, die Sie nicht abgedeckt haben, durchkommt. Bedenken Sie Folgendes:
%Vor%Nichts passiert, wenn myVariable 0 ist. Es wäre schwer zu sehen, ob Sie nur den Code durchblättern würden. Ich würde sagen, wenn Sie auf dieses Muster stoßen, wäre es ein Code-Geruch, etwas könnte falsch sein, aber es könnte in Ordnung sein.
Die gleiche Logik könnte immer mit verschachtelten if-Anweisungen ausgedrückt werden. Ich würde mit allem, was lesbarer ist, gehen.
Tags und Links javascript conditional if-statement