Switch (instruction)
En programmation informatique, switch (« aiguillage » en anglais), parfois aussi select (comme en VB) ou inspect ou case of (Pascal, Modula 2) ou Match (Rust et Python) est une instruction qui permet d'effectuer un branchement à partir de la valeur d'une variable. Elle peut dans certains cas remplacer une série (souvent peu élégante) de if… else. On l'utilise lorsque les cas à gérer sont nombreux.
Ce mécanisme est préfiguré dans les années 1960 par les branchements calculés.
Fonctionnement
[modifier | modifier le code]Switch évalue l'expression qui lui est donnée et aiguille le programme vers le cas correspondant à la valeur effective de cette expression. Les cas sont indiqués par l'instruction case.
Justification
[modifier | modifier le code]Ce genre de constructions a été introduit pour
- augmenter la lisibilité côté lecteur,
- par dualité, faciliter le traitement des articles ou structures à structure variée I.e. dépendant de la valeur d'un champ ; par exemple, un fichier "employés" établi pour calculer la paie contiendra, pour chaque personne, divers indicateurs statutaires (entrainant des variantes dans les autres renseignements nécessaires), dont dépendront les variantes correspondantes dans le mode de calcul.
Conditions d'utilisation
[modifier | modifier le code]En C
[modifier | modifier le code]En C, les switch s'appuient sur une valeur entière ou de type énuméré. Les valeurs d'aiguillage doivent être des nombres entiers (attention, impossible d'utiliser une variable, même constante ; ces entiers peuvent cependant être cachés derrière des macros) ou des énumérateurs.
Lorsque le programme est aiguillé, il entre dans le bloc du switch et n'en sort que lorsqu'un break
est rencontré. Si la valeur de l'expression donnée ne correspond à aucun des cas, le pointeur programme est aiguillé vers l'instruction default qui doit apparaître après tous les case. Si le bloc n'en possède pas, il est sauté.
En Pascal
[modifier | modifier le code]En Pascal, l'instruction case teste des conditions à valeurs booléennes, des entiers, des chaînes de caractères ou des énumérateurs. Au premier sélecteur amorcé, l'instruction correspondante (délimitée par un bloc BEGIN END) est exécutée et le pointeur programme passe à l'instruction qui suit tout le bloc case ; contrairement au switch du langage C, les différentes clauses sont donc mutuellement exclusives.
En PHP
[modifier | modifier le code]En PHP, switch fonctionne tant que l'égalité peut être vérifiée entre la variable testée et les valeurs des cas.
En Python
[modifier | modifier le code]En Python, l'instruction switch existe à partir de la mise à jour 3.10 sous le nom de match
.
Voir aussi
[modifier | modifier le code]Niklaus Wirth, 1985, Algorithms and data structures. Prentice Hall 1985, (ISBN 978-0-13-022005-9).
Niklaus Wirth, 1984, (trad. Jacques André), Programmer en Modula 2, Presses Polytechniques et Universitaires Romandes, Lausanne (ISBN 2-88074-063-0)
Syntaxe
[modifier | modifier le code]- En PHP :
switch (variable) {
case "valeur1": action1; break;
case "valeur2": action2; break;
case "valeur3": action3; break;
case "valeur4": action4; break;
default: actionpardefaut;
}
La syntaxe est identique en C (sauf pour ce qui est des chaînes de caractères).
En C on aurait donc :
switch(x) // x doit obligatoirement être un entier, les printf sont des exemples d'instructions
{
case 1: printf(" nous sommes dans le cas où x = 1"); break;
case 2: printf(" nous sommes dans le cas où x = 2"); break;
case 3: printf(" nous sommes dans le cas où x = 3"); break;
case 4: printf(" nous sommes dans le cas où x = 4"); break;
}
Implémentation
[modifier | modifier le code]- Si le nombre de valeurs est faible, l'instruction switch peut être convertie par le compilateur en une simple liste de comparaisons.
- Si le nombre de valeurs est élevé, le compilateur aura intérêt à générer une table de branchements. Ce mécanisme rend le temps d'accès à un cas indépendant de son emplacement, ce qui est très appréciable si on doit traiter rapidement des situations complexes, réaliser un interprète, etc. mais impose que le sélecteur admette un nombre limité de valeurs discrètes..
« Python 3.10 ».