Switch
En Java, le switch est une structure de contrôle qui permet de sélectionner un bloc de code à exécuter parmi plusieurs options, en se basant sur la valeur d'une expression. C'est une alternative plus lisible à une série de if-else if imbriqués, surtout quand on teste l'égalité d'une variable avec plusieurs valeurs.
Voici la structure générale du switch en Java :
switch (expression) {
case valeur1:
// Bloc de code à exécuter si expression == valeur1
break; // Important : pour sortir du switch après l'exécution du bloc
case valeur2:
// Bloc de code à exécuter si expression == valeur2
break;
case valeur3:
// Bloc de code à exécuter si expression == valeur3
break;
// ... d'autres cas
default: // Optionnel
// Bloc de code à exécuter si aucune des valeurs précédentes ne correspond
}
Explication des éléments:
-
switch (expression): L'expression entre parenthèses doit être d'un type qui peut être comparé à des valeurs constantes. Avant Java 7, c'était limité aux typesint,short,byte,charetenum. Depuis Java 7, lesStringsont également autorisées. L'expression est évaluée une seule fois. -
case valeur1:,case valeur2:, etc.: Chaquecasereprésente une valeur possible de l'expression. La valeur doit être une constante littérale ou une constantefinal. Le type de la valeur doit correspondre au type de l'expression. -
break;: Le mot-clébreakest crucial. Il permet de sortir duswitchaprès l'exécution du bloc de code correspondant aucasetrouvé. Si vous oubliez unbreak, l'exécution continuera dans lecasesuivant (ce qu'on appelle le "fallthrough"). Ceci peut être intentionnel dans certains cas très spécifiques, mais c'est souvent une source d'erreurs. -
default:(optionnel): Le blocdefaultest exécuté si aucune des valeurscasene correspond à la valeur de l'expression. C'est l'équivalent duelsedans une série deif-else if.
Exemple concret:
int jourSemaine = 3; // 1 pour lundi, 2 pour mardi, etc.
String nomJour;
switch (jourSemaine) {
case 1:
nomJour = "Lundi";
break;
case 2:
nomJour = "Mardi";
break;
case 3:
nomJour = "Mercredi";
break;
case 4:
nomJour = "Jeudi";
break;
case 5:
nomJour = "Vendredi";
break;
case 6:
nomJour = "Samedi";
break;
case 7:
nomJour = "Dimanche";
break;
default:
nomJour = "Jour invalide";
}
System.out.println("Le jour de la semaine est : " + nomJour); // Affiche "Le jour de la semaine est : Mercredi"
Points importants:
- Le
switchest plus lisible que desif-else ifimbriqués pour tester l'égalité avec plusieurs valeurs. - Le
breakest essentiel pour éviter le "fallthrough" (sauf si c'est intentionnel). - Le
defaultest optionnel, mais recommandé pour gérer les cas non prévus. - Les types d'expression et de valeurs
casedoivent correspondre. - Depuis Java 7, les
Stringsont autorisées dans leswitch.
En résumé, le switch est un outil puissant pour simplifier le code et le rendre plus lisible lorsqu'on doit gérer plusieurs options basées sur une seule expression. N'oubliez pas l'importance du break!
Nouvelle syntaxe du switch sans break (Java 14 et versions ultérieures) :
Comme nous développons sur la version 23 de java, nous pouvons tirer profit des nouvelles façons de faire:
int jourSemaine = 3;
String nomJour;
switch (jourSemaine) {
case 1 -> nomJour = "Lundi";
case 2 -> nomJour = "Mardi";
case 3 -> nomJour = "Mercredi";
case 4 -> nomJour = "Jeudi";
case 5 -> nomJour = "Vendredi";
case 6 -> nomJour = "Samedi";
case 7 -> nomJour = "Dimanche";
default -> nomJour = "Jour invalide";
}
System.out.println("Le jour de la semaine est : " + nomJour); // Affiche "Le jour de la semaine est : Mercredi"
Explication des changements :
-
case valeur -> expression;: Au lieu decase valeur:, on utilise maintenantcase valeur -> expression;. Cela signifie que sijourSemaineest égal àvaleur, alors l'expression à droite de->est évaluée et son résultat est affecté à la variablenomJour. Il n'y a plus besoin debreakcar l'exécution ne se poursuit pas dans les autrescase. -
Plusieurs instructions par
case: Si vous avez besoin de plusieurs instructions pour uncase, vous pouvez les regrouper dans un bloc de code en utilisant des accolades{}et le mot-cléyieldpour retourner une valeur :
switch (jourSemaine) {
case 1 -> {
System.out.println("C'est lundi !");
yield "Lundi";
}
// ... autres cas
default -> "Jour invalide";
}
Avantages de la nouvelle syntaxe :
- Plus concise et lisible : La syntaxe est plus courte et plus facile à lire, surtout lorsqu'il y a de nombreux
case. - Moins de risques d'erreurs : L'absence de
breakélimine le risque d'oublier unbreaket de provoquer un "fallthrough" involontaire. - Support des expressions : On peut utiliser des expressions à droite de
->, ce qui rend le code plus expressif.
Important :
- Cette nouvelle syntaxe est disponible à partir de Java 14. Si vous utilisez une version antérieure de Java, vous devez utiliser l'ancienne syntaxe avec
break.
En résumé, la nouvelle syntaxe des switch en Java est une amélioration significative qui rend le code plus propre, plus lisible et moins sujet aux erreurs. Si vous utilisez Java 14 ou une version ultérieure, je vous recommande vivement d'adopter cette nouvelle façon de faire les switch.