Aller au contenu principal

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 types int, short, byte, char et enum. Depuis Java 7, les String sont également autorisées. L'expression est évaluée une seule fois.

  • case valeur1:, case valeur2:, etc.: Chaque case représente une valeur possible de l'expression. La valeur doit être une constante littérale ou une constante final. Le type de la valeur doit correspondre au type de l'expression.

  • break;: Le mot-clé break est crucial. Il permet de sortir du switch après l'exécution du bloc de code correspondant au case trouvé. Si vous oubliez un break, l'exécution continuera dans le case suivant (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 bloc default est exécuté si aucune des valeurs case ne correspond à la valeur de l'expression. C'est l'équivalent du else dans une série de if-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 switch est plus lisible que des if-else if imbriqués pour tester l'égalité avec plusieurs valeurs.
  • Le break est essentiel pour éviter le "fallthrough" (sauf si c'est intentionnel).
  • Le default est optionnel, mais recommandé pour gérer les cas non prévus.
  • Les types d'expression et de valeurs case doivent correspondre.
  • Depuis Java 7, les String sont autorisées dans le switch.

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 de case valeur:, on utilise maintenant case valeur -> expression;. Cela signifie que si jourSemaine est égal à valeur, alors l'expression à droite de -> est évaluée et son résultat est affecté à la variable nomJour. Il n'y a plus besoin de break car l'exécution ne se poursuit pas dans les autres case.

  • Plusieurs instructions par case : Si vous avez besoin de plusieurs instructions pour un case, vous pouvez les regrouper dans un bloc de code en utilisant des accolades {} et le mot-clé yield pour 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 un break et 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.