[JAVA] J'ai rencontré une grande déclaration de commutateur

J'ai rencontré une grande déclaration de commutateur

Je suis tombé sur ce code dans un projet de refactoring Java.

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

À première vue, le «cas 0» semble n'effectuer que le «traitement A», mais si vous regardez de près, le «cas 0» n'a pas de «pause», donc en fait le «traitement B» est également exécuté. !!

Au début, avez-vous oublié d'écrire «break»? J'ai pensé, mais apparemment, il s'est comporté comme spécifié.

C'était une technique appelée fallthrough

De cette façon, la notation qui omet intentionnellement «break» est appelée ** fall through **. Si vous regardez de près, vous pouvez le voir dans les commentaires.

Je l'ai remplacé par l'instruction ʻif`

Cette erreur est une technique très intéressante, mais je pensais que ce serait trompeur et un terrain fertile pour les bugs, alors malheureusement j'ai décidé de la remplacer par la déclaration ʻif`.

if ( cmd == 0 ) {
    //Processus A
}

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

Eh bien, était-ce plus simple avant le changement? C'est subtil. Mais je n'ai plus à me soucier des erreurs de lecture.

Cependant, si cmd est de type String, vous ne pouvez pas l'écrire comme ceci. s'inquiéter.

S'il existe une meilleure façon de l'écrire, faites-le moi savoir.

Langues qui peuvent et ne peuvent pas tomber

J'étais curieux de connaître la situation dans d'autres langues, alors j'ai jeté un coup d'œil.

Langues qui tombent si break est omis dans l'instruction switch

Langues qui se fâchent si vous omettez break dans l'instruction switch

Langages qui spécifient explicitement le fallthrough dans l'instruction switch

--Perl (précisez suivant) --Swift (spécifier fallthrough) --Go (spécifier fallthrough)

Un langage qui a une syntaxe similaire à l'instruction switch mais qui ne peut pas tomber

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

Langages qui n'ont pas de syntaxe équivalente à l'instruction switch

Langue dans laquelle tous les blocs qui remplissent les conditions sont exécutés

Cela dépend de la langue! J'ai beaucoup appris.

Recommended Posts

J'ai rencontré une grande déclaration de commutateur
instruction switch
Instruction de commutation Java
spécification de plage d'instruction switch
Étude de l'instruction Java-Part 11-switch
Rechercher une instruction Switch qui peut être convertie en une expression Switch
[Swift] instruction switch utilisant tapple
J'ai créé une application de chat.
Comprenons l'instruction switch!
Une histoire que j'ai finalement comprise Java pour une déclaration en tant que non-ingénieur