Warum würde Javascript 'wenn ... sonst wenn' nicht mit einem 'anderen' enden?

8

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.

%Vor%     
Starkemp315 09.11.2011, 05:00
quelle

8 Antworten

12
  

Ich dachte, es sollte immer mit einem "anderen" enden?

Sie sind falsch. Der else -Block ist optional. Sie können if ohne else haben.

    
Thilo 09.11.2011 05:04
quelle
5

Aus dem gleichen Grund, warum Sie nur eine einzige haben können, wenn:

%Vor%     
Petar Ivanov 09.11.2011 05:03
quelle
2

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.

    
Niet the Dark Absol 09.11.2011 05:04
quelle
2

Betrachten Sie 3 Szenario
Szenario 1: Boolesche Bedingung

%Vor%

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.

    
Wazzzy 09.11.2011 05:12
quelle
0

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. .

    
Serdalis 09.11.2011 05:04
quelle
0

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.

    
linuxdan 22.07.2016 23:49
quelle
-2

Ja, immer eine else ist SEHR GUT Gewohnheit (bei Verwendung mit if-elseif). manchmal schreiben die Leute vielleicht sogar:

%Vor%

um den Leuten zu sagen, dass es in der Tat nichts zu tun gibt.

    
James.Xu 09.11.2011 05:03
quelle
-4

Ändere die if-Bedingung für die Antwortvalidierung if (answer == 100) bis if (answer === 100) es funktioniert jetzt gut ...

    
Nagendra 16.03.2013 06:41
quelle