Foreach

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

foreach - itère sur tout les éléments d'une ou plusieurs listes

Syntaxe

foreach varname list body
foreach varlist1 list1 ?varlist2 list2 ...? body

Description

La commande foreach implémente une boucle où la ou les variable(s) de boucle tirent leur valeurs d'une ou de plusieurs listes. Dans le cas le plus simple il y a une variable de boucle, varname, et une liste, list, qui est une liste de valeurs a assigner à varname. L'argument body est un script Tcl. Pour chaque élément de list (dans l'ordre du premier au dernier), foreach assigne le contenu de l'élément à varname comme si la commande lindex avait été utilisée pour extraire l'élément, ensuite elle appelle l'interpréteur Tcl pour exécuter body.

Dans le cas general il peut y avoir plus d'une liste de valeurs (ex., list1 et list2), et chaque liste de valeurs peut être associée à une liste de variables de boucle (ex., varlist1 et varlist2). Durant chaque iteration de la boucle, aux variables de chaque varlist sont assignés les valeurs consecutive de la correspondante list. Les valeurs de chaque list sont utilisées dans l'ordre du premier to dernier, et chaque valeur est utilisée une seule fois. Le nombre total d'itérations est suffisant pour utiliser toutes les valeurs à partir de toutes les listes de valeurs. Si une liste de valeurs ne contient pas assez d'éléments pour chacune de ses variables de boucle à chaque iteration, des valeurs vides sont utilisées pour les éléments manquants.

Les instructions break et continue peuvent être appelées dans body, avec le même effet que dans la commande for. Foreach retourne une chaîne vide.

Exemples

La boucle suivante utilise i et j comme variables de boucle pour itérer sur des paires d'éléments d'une simple liste.

set x {}
foreach {i j} {a b c d e f} {
   lappend x $j $i
}
# La valeur de x est "b a d c f e"
# Il y a 3 iterations de boucle.

La boucle suivante utilise i et j pour itérer sur deux listes en parallèle.

set x {}
foreach i {a b c} j {d e f g} {
   lappend x $i $j
}
# La valeur de x est "a d b e c f {} g"
# Il y a 4 iterations de boucle.

Les deux formes sont combinées dans le suivant exemple.

set x {}
foreach i {a b c} {j k} {d e f g} {
   lappend x $i $j $k
}
# La valeur de x est "a d e b f g c {} {}"
# Il y a 3 iterations de boucle.

Voir également

if, switch, for, while, incr, break, continue, Conditions