[JAVA] Ich habe eine großartige switch-Anweisung getroffen

Ich habe eine großartige switch-Anweisung getroffen

Ich bin auf diesen Code in einem Java-Refactoring-Projekt gestoßen.

switch ( cmd ) {
    case 0: 
        //Prozess A.
        // fall through
    case 1:
    case 2:
        //Prozess B.
        break;
    default:
        //Prozess C.
        break;
}

Auf den ersten Blick scheint "Fall 0" nur "Verarbeitung A" auszuführen, aber wenn Sie genau hinschauen, hat "Fall 0" keine "Unterbrechung", so dass tatsächlich auch "Verarbeitung B" ausgeführt wird. !!

Hast du zuerst vergessen, "Pause" zu schreiben? Ich dachte, aber anscheinend hat es sich wie angegeben verhalten.

Es war eine Technik namens Fallthrough

Auf diese Weise wird die Notation, die absichtlich "break" weglässt, ** fall through ** genannt. Wenn Sie genau hinschauen, können Sie es in den Kommentaren sehen.

Ich habe es durch die if-Anweisung ersetzt

Dieser Fallthrough ist eine sehr interessante Technik, aber leider habe ich beschlossen, sie durch die "if" -Anweisung zu ersetzen, weil ich dachte, sie wäre irreführend und ein Nährboden für Fehler.

if ( cmd == 0 ) {
    //Prozess A.
}

if ( cmd <= 2 ) {
    //Prozess B.
} else {
    //Prozess C.
}

War es vor dem Wechsel einfacher? Es ist subtil. Aber ich muss mir keine Sorgen mehr machen, dass ich falsch lese.

Wenn cmd jedoch vom Typ String ist, können Sie es nicht so schreiben. sich Sorgen machen.

Wenn es einen besseren Weg gibt, es zu schreiben, lass es mich wissen.

Sprachen, die durchfallen können und nicht

Ich war neugierig auf die Situation in anderen Sprachen und habe einen kurzen Blick darauf geworfen.

Sprachen, die durchfallen, wenn "break" in der "switch" -Anweisung weggelassen wird

Sprachen, die wütend werden, wenn Sie "break" in der "switch" -Anweisung weglassen

Sprachen, die in der Anweisung "switch" explizit den Fallthrough angeben

--Perl (geben Sie "next" an) --Swift (geben Sie "Fallthrough" an) --Go ("Fallthrough" angeben)

Eine Sprache mit einer Syntax ähnlich der Anweisung "switch", die jedoch nicht durchfallen kann

--Ruby (case Anweisung) --Scala (match Anweisung) --Kotlin (when Anweisung)

Sprachen, deren Syntax nicht der Anweisung "switch" entspricht

Sprache, in der alle Blöcke ausgeführt werden, die die Bedingungen erfüllen

Es kommt auf die Sprache an! Ich habe viel gelernt.

Recommended Posts

Ich habe eine großartige switch-Anweisung getroffen
switch-Anweisung
Java-Switch-Anweisung
Bereichsspezifikation für switch-Anweisungen
Studieren der Java-Part 11-switch-Anweisung
Suchen Sie eine Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann
[Swift] switch-Anweisung mit tapple
Ich habe eine Chat-App erstellt.
Lassen Sie uns die switch-Anweisung verstehen!
Eine Geschichte, die ich als Nicht-Ingenieur endlich verstanden habe