Switch (instruction)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Switch.

En programmation informatique, switch (« aiguillage » en anglais), parfois aussi select (comme en VB) ou inspect ou case of (Pascal, Modula 2) 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 ifelse. On l'utilise lorsque les cas à gérer sont nombreux.

Ce mécanisme est préfiguré dans les années 60 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.

Lorsque le programme est aiguillé, il entre dans le bloc du switch et n'en sort que lorsqu'un break est rencontré, ou au début du cas suivant, selon le langage. Si la valeur de l'expression donnée ne correspond à aucun des cas, le 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é.

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.

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 n'existe pas ; il faut la remplacer par une suite de si/sinon, ou en passant par un lambda-calcul.

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 ou x = 1"); break;
case 2: printf(" nous sommes dans le cas ou x = 2"); break;
case 3: printf(" nous sommes dans le cas ou x = 3"); break;
case 4: printf(" nous sommes dans le cas ou 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..