====== switch ====== Évalue un parmi plusieurs scripts, dépendant d'une valeur donnée ===== Syntaxe ===== switch ?options? string pattern body ?pattern body ...? switch ?options? string {pattern body ?pattern body ...?} ===== Description ===== La commande **switch** compare son argument //string// à chacun des arguments //pattern// dans l'ordre. Dès qu'elle trouve un //pattern// qui correspond à //string// elle évalue les argument //body// suivants en les transmettant récursivement à l'interpréteur Tcl et retourne le résultat de cette évaluation . Si le dernier argument //pattern// est **default** alors il correspond à tout. Si aucun argument //pattern// correspond à //string// et qu'aucun défaut n'est donné, alors **switch** retourne une chaîne vide. Si les arguments initiaux de switch commencent avec - alors ils sont traités comme des options Les options suivantes sont couramment supportées: * **-exact** Utilise la correspondance exacte pendant la comparaison de string à un modèle C'est le défaut. * **-glob** Pendant la comparaison de string aux modèles, utilise une correspondance glob-style (ex. la même qu'implémentée par la commande [[:tcl:string#match|string match]]). * **-regexp** Pendant la comparaison de string aux modèles, utilise la correspondance expression rationnelle (comme décrit dans la page de [[:faq:re_syntax]]). * **--** Marque la fin des options L'argument suivant sera traité comme string même s'il commence avec un -. Deux syntaxes sont fournie pour les arguments //pattern// et //body//. - La première utilise un argument séparé pour chacun des modèles et commandes; cette forme est pratique si des substitutions sont désirées sur un modèle ou une commande. - La seconde forme place tous les modèles et les commandes ensemble dans un seul argument; l'argument doit avoir une structure de liste correcte, avec les éléments de la liste étant les modèles et les commandes. La seconde forme facilite la construction de commandes **switch** multi-ligne, puisque les accolades entourant la liste rendent inutile l'inclusion d'un antislash à la fin de chaque ligne. Comme les arguments //pattern// sont dans accolades dans la seconde forme, aucunes substitutions de commande ou de variable ne sont effectuée sur ceux-ci; cela rend le comportement de la seconde forme différent de la première forme dans certains cas. Si un //body// est spécifié comme "-" cela signifie que le //body// du modèle suivant doit être aussi utilisé comme le corps pour ce modèle (si le modèle suivant a aussi un corps de "-" alors le corps qui est utilisé après, et ainsi de suite). Cette fonctionnalité rend possible de partager une seul body entre plusieurs modèles. Attention à l'emplacement des commentaires dans les commandes switch Ils devront être placés seulement dans l'exécution du corps d'un des modèles, et pas mélangés avec les modèles. ===== Exemples ===== switch abc a - b {format 1} abc {format 2} default {format 3} # 2 switch -regexp aaab { ^a.*b$ - b {format 1} library {format 2} default {format 3} } # 1 switch xyz { a - b { # Placement Correct du Commentaire format 1 } library { format 2 } default { format 3 } } # 3 ===== Voir aussi ===== {{tag>tcl}}