96 votes

Pourquoi avons-nous besoin de pause après l'affaire états?

Pourquoi ne pas le compilateur de mettre automatiquement break après chaque bloc de code dans le switch? Est-ce pour des raisons historiques? Quand voulez-vous de plusieurs blocs de code à exécuter?

95voto

WildCrustacean Points 4077

Parfois, il est utile d'avoir plusieurs cas associé avec le même bloc de code, tels que

case 'A':
case 'B':
case 'C':
    doSomething();
    break;

case 'D':
case 'E':
    doSomethingElse();
    break;

etc. Juste un exemple.

Dans mon expérience, il est généralement mauvais style de "tomber" et ont plusieurs blocs de code à exécuter pour un cas, mais il peut être utilise dans certaines situations.

33voto

Bob Cross Points 13552

Historiquement, c'est parce que l' case a été essentiellement la définition d'un label, aussi connu comme le point cible d'un goto appel. L'instruction switch et ses associés des cas vraiment juste représentent un multiway de la direction, avec de multiples points d'entrée possibles dans un flux de code.

Tout cela étant dit, il a été noté un nombre presque infini de fois qu' break est presque toujours le comportement par défaut que vous préférez vous avez à la fin de chaque cas.

32voto

Romain Hippeau Points 16175

Java est à partir de C et qui est la syntaxe du langage C.

Il y a des moments où vous souhaitez que plusieurs cas de déclarations pour avoir un chemin d'exécution. Ci-dessous est un exemple qui va vous dire combien de jours dans un mois.

class SwitchDemo2 {
    public static void main(String[] args) {

        int month = 2;
        int year = 2000;
        int numDays = 0;

        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if ( ((year % 4 == 0) && !(year % 100 == 0))
                     || (year % 400 == 0) )
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Invalid month.");
                break;
        }
        System.out.println("Number of Days = " + numDays);
    }
}

15voto

GregS Points 16158

Je pense que c'est une erreur. Comme une structure du langage, il est tout aussi facile d' break comme valeur par défaut, au lieu d'avoir un fallthrough mot-clé. La plupart du code que j'ai écrit et de la lecture a une pause après chaque cas.

13voto

Zach Johnson Points 12062

Vous pouvez faire toutes sortes de choses intéressantes avec le cas de l'automne.

Par exemple, disons que vous voulez faire une action particulière pour tous les cas, mais dans certains cas, vous voulez faire une action plus quelque chose d'autre. À l'aide d'une instruction switch avec fall-through serait assez facile.

switch (someValue)
{
    case extendedActionValue:
        // do extended action here, falls through to normal action
    case normalActionValue:
    case otherNormalActionValue:
        // do normal action here
        break;
}

Bien sûr, il est facile d'oublier l' break déclaration à la fin d'un cas et de provoquer un comportement inattendu. Bon compilateurs vous avertira si vous omettez l'instruction break.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X