Aller au contenu

La condition SWITCH

"Quand tu as beaucoup de cas possibles, mieux vaut un switch qu'une avalanche de if."

Un développeur organisé

Pourquoi utiliser switch ?

L’instruction switch est utilisée lorsque vous devez tester une même variable contre plusieurs valeurs possibles.

Elle est plus lisible et plus claire qu’une suite de if / else if.

Syntaxe

Représentation schématique d’un switch

Syntaxe de base d’un switch

Voici une explication claire de chaque élément constituant un switch :

switch (expression)
{
    case valeur1:
        // instructions à exécuter si expression == valeur1
        break;

    case valeur2:
        // instructions à exécuter si expression == valeur2
        break;

    default:
        // instructions à exécuter si aucune valeur ne correspond
        break;
}

🔹 expression

C’est la variable ou la valeur que vous voulez tester. Elle est évaluée une seule fois.

🔹 case valeurX:

Chaque case représente une valeur possible que peut prendre expression.
Si expression == valeurX, alors le bloc associé s’exécute.

🔹 break;

Il interrompt le switch immédiatement après l'exécution d’un case.
Sans break, l’exécution continue vers les case suivants (fall-through), ce qui peut provoquer des erreurs.

🔹 default:

Ce bloc est optionnel, mais recommandé.
Il s’exécute si aucune des valeurs des case ne correspond à expression.
Pensez-y comme un else pour un if.


Exemple commenté :

int note = 12;

switch (note)
{
    case 20:
        Console.WriteLine("Excellent");
        break; // on sort du switch ici

    case 12:
        Console.WriteLine("Moyen");
        break;

    case 0:
        Console.WriteLine("Nul");
        break;

    default:
        Console.WriteLine("Note inconnue");
        break;
}

➡️ Ici, note vaut 12, donc seul le bloc case 12: s’exécute.

switch (variable)
{
    case valeur1:
        // instructions
        break;

    case valeur2:
        // instructions
        break;

    default:
        // instructions si aucune valeur ne correspond
        break;
}

Exemple simple

int jour = 3;

switch (jour)
{
    case 1:
        Console.WriteLine("Lundi");
        break;
    case 2:
        Console.WriteLine("Mardi");
        break;
    case 3:
        Console.WriteLine("Mercredi");
        break;
    default:
        Console.WriteLine("Jour inconnu");
        break;
}

➡️ Le programme affiche : Mercredi


⚠️ Erreurs fréquentes

  • Oublier les break
    ➜ Peut entraîner l’exécution de plusieurs cases à la suite (comportement dit de fall-through).

  • Utiliser des types non supportés (comme float)
    switch ne fonctionne qu’avec des types discrets (int, char, string, enum...).

  • Ne pas inclure de default
    ➜ Bien que facultatif, c’est une bonne pratique d’avoir un cas par défaut pour gérer les valeurs inattendues.

  • Utiliser des expressions complexes dans les case
    ➜ Les case doivent tester des constantes, pas des calculs ni des expressions.


Avantages de switch

  • Plus lisible que de nombreux if / else if
  • Plus performant dans certains cas
  • Permet une structure propre et centralisée pour des cas simples

Astuces et précisions utiles

🔸 Enchaîner plusieurs case (cas équivalents)

Il est possible d’associer plusieurs case à une même action sans répéter le bloc de code :

int jour = 6;

switch (jour)
{
    case 6:
    case 7:
        Console.WriteLine("C’est le week-end !");
        break;

    default:
        Console.WriteLine("Jour de semaine.");
        break;
}

➡️ Si jour vaut 6 ou 7, le même bloc s’exécutera.


🔸 ❌ Pas de conditions complexes dans les case

Les case ne peuvent pas contenir d’expressions ou de comparaisons, uniquement des valeurs constantes.

// ❌ Erreur !
case (age > 18):
    Console.WriteLine("Adulte");
    break;

✅ À la place, utilisez if si vous avez besoin de comparer ou tester une condition logique.


🔸 Types acceptés dans switch

En C#, le switch fonctionne uniquement avec : - int, char, string - enum - depuis C# 7+ : switch avec pattern matching (non couvert ici)

Ne fonctionne pas avec : - float, double - des objets complexes sans surcharge d'égalité


🔸 Bonnes pratiques

  • ✅ Toujours ajouter un default pour capturer les cas inattendus
  • ✅ Bien commenter si plusieurs case s'enchaînent
  • ✅ Vérifier que chaque case se termine correctement (break, return, etc.)

🔸 Utiliser return dans un switch

Dans certains cas, notamment dans une méthode ou une fonction, on peut utiliser return au lieu de break pour terminer immédiatement l’exécution du switch (et de la méthode).

Exemple :

string ObtenirJour(int jour)
{
    switch (jour)
    {
        case 1:
            return "Lundi";
        case 2:
            return "Mardi";
        case 3:
            return "Mercredi";
        default:
            return "Inconnu";
    }
}

➡️ Ici, chaque case renvoie une valeur directement.
Il n’est pas nécessaire d’utiliser break puisqu’un return met fin à l'exécution de la méthode.

Astuce : Si tu utilises return, n’ajoute pas break ensuite — il serait inutile.

La différence avec if…else if…else est qu’avec switch, la condition d’aiguillage doit porter sur la comparaison d’une variable entière avec des valeurs constantes, et non sur une condition quelconque (l’aiguillage en fonction de conditions comme delta>0, delta<0 ou mesure==0.0, doit être réalisés avec if…else if)


Quiz

Testez vos connaissances ! 📝 Clique sur chaque question pour découvrir la réponse.

1️⃣ Quand est-il conseillé d’utiliser un switch ?

A. Pour comparer deux nombres
B. Quand il n’y a qu’un seul cas
C. Pour tester une variable contre plusieurs valeurs fixes
D. Pour effectuer des boucles
E. Pour remplacer tous les if

✅ Afficher la réponse
Réponse C: switch est utile quand une même variable doit être comparée à plusieurs valeurs fixes.

2️⃣ Que fait ce code ?
int choix = 2;
switch (choix)
{
    case 1:
        Console.WriteLine("Un");
        break;
    case 2:
        Console.WriteLine("Deux");
    case 3:
        Console.WriteLine("Trois");
        break;
}

A. Affiche "Deux"
B. Affiche "Deux Trois"
C. Affiche "Trois"
D. Ne compile pas
E. Rien du tout

✅ Afficher la réponse
Réponse B: Sans break après le case 2, l’exécution continue sur le case 3.

3️⃣ Que signifie le mot-clé default dans un switch ?

A. C’est le premier cas testé
B. Il remplace le break
C. Il gère les cas où aucune valeur ne correspond
D. Il désactive les autres cas
E. Il est obligatoire

✅ Afficher la réponse
Réponse C: default est exécuté quand aucun case ne correspond.

4️⃣ Pourquoi les break sont-ils importants ?

A. Pour marquer la fin du programme
B. Pour éviter que les case suivants soient exécutés
C. Pour accélérer le code
D. Pour ignorer la condition
E. Ils ne sont pas obligatoires

✅ Afficher la réponse
Réponse B: Sans break, l’exécution continue dans les case suivants.

5️⃣ Quel type n’est pas utilisable dans un switch en C# ?

A. int
B. string
C. enum
D. float
E. char

✅ Afficher la réponse
Réponse D: Le type float n’est pas supporté dans les case d’un switch C#.


Navigation

Introduction If Switch Travail pratique


Pour aller plus loin