Jshint: Fall-Anweisung durchfallen aktivieren

Erstellt am 18. Feb. 2011  ·  10Kommentare  ·  Quelle: jshint/jshint

Eines der Dinge, von denen ich Crockford nie überzeugen konnte, ist, Fall-Statements zuzulassen.

Aktuell ist das in Ordnung:

Schalter (foo) {
Fall 1:
Fall 2:
etwas tun();
}

Aber das ist nicht:

Schalter (foo) {
Fall 1:
doSomethingFirst();
Fall 2:
etwas tun();
}

In einer Version von JSLint, die ich zuvor gehackt habe, habe ich einen Kommentar /_fall through_/ überprüft, um darauf hinzuweisen, dass Sie beabsichtigen, durchzufallen:

Schalter (foo) {
Fall 1:
doSomethingFirst();
/_fällt durch_/
Fall 2:
etwas tun();
}

Ich würde dies wirklich gerne in JSHint sehen, da es in JSLint für sehr lange Zeit ein Problem für mich war.

Hilfreichster Kommentar

Für diejenigen, die nach dem Objektschlüssel .jshintrc suchen:

"-W086": true, //allow fall-through

Alle 10 Kommentare

Außerdem sollte JSHint ab #11 wahrscheinlich eine Option haben, die den Fall bis zum default .

Da das Fall-Through meistens unbeabsichtigt ist, habe ich keine separate Option hinzugefügt, um die Nachricht einfach zu ignorieren. Stattdessen habe ich Ihren Ansatz mit einem ausdrücklichen Kommentar wiederverwendet, der besagt, dass das Durchfallen beabsichtigt ist.

 Schalter (foo) {
 Fall 1:
 mach etwas();
 /* fällt durch */
 Fall 2:
 mach etwas();
 }

Zugehöriges Commit: 4a72da1.

Super, danke!

IIRC, Crockford erwähnt in seinem Buch ausdrücklich, warum er das Fall-Through nicht mag. Die Geschichte ist sowohl amüsant als auch etwas deprimierend.

Es tut mir leid, dies zu kommentieren, aber die Warnung wird immer noch für case s mit einem Wurf am Ende eines Blocks ausgelöst. Sie können die Warnung mit einer /* falls through */ Anmerkung deaktivieren, aber die Anmerkung wird "gestört" (in dem Sinne, dass die Warnung dann doch ausgelöst wird) durch alles andere als Leerzeichen zwischen dem vorherigen Fall, der Anmerkung und dem nächsten Fall, also kann ich nicht einmal sagen, warum der Kommentar da ist.

Der Kommentar /* falls through */ anstelle von break; ist eine nicht dokumentierte Funktion. Bitte fügen Sie es den Dokumenten hinzu.

Zusätzliche Kommentare können in einer Zeile vor /* falls through */ hinzugefügt werden.

Abgeordnet. Bitte fügen Sie /*falls through*/ zu den Dokumenten hinzu.

Bitte fügen Sie auch Unterstützung hinzu für:

case 'none':
default:

Obwohl der Fall 'none' technisch unnötig ist, trägt er zur Lesbarkeit des Codes bei.

+1 für das Hinzufügen von Informationen dazu zu den Dokumenten.

Als interessanter Punkt habe ich kürzlich eine Situation gefunden, in der Fälle "durchfallen" sinnvoll sind. Ich habe dies verwendet, um Migrationen von versionierten Daten durchzuführen, die aus localStorage gelesen wurden. Ex:

function migrate( version, data ) {
    switch( version ) {
        case 1 :
            data.new1 = data.old;  // convert data from version 1 to version 2
            delete data.old;
        case 2 :
            data.new2 = data.new1;  // convert data from version 2 to version 3
            delete data.new1;
    }
    return data;  // return data in version 3 format
}

Wenn sich das Datenformat weiterentwickelt, kann der Code gepflegt werden, indem Fälle für die Migration älterer Versionen hinzugefügt werden, und alle Migrationen, um eine bestimmte Version auf den neuesten Stand zu bringen, werden angewendet.

Für diejenigen, die nach dem Objektschlüssel .jshintrc suchen:

"-W086": true, //allow fall-through
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen