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?
Réponses
Trop de publicités?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.
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.
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);
}
}
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.