FOREACH

Instruction

Syntaxe

Parcourt une liste ou une map de son premier élément à son dernier. Dans la boucle, l'élément du tour est l'élément courant.

FOREACH <collection>()
  <statements>
NEXT [<collection>()]

Les éléments

<collection>Une liste déclarée par NewList, une map déclarée par NewMap, ou un champ liste ou map d'un enregistrement (bag.items). Les parenthèses sont obligatoires.
<statements>Le corps. <collection>() lit ou modifie l'élément du tour ; MapKey() donne la clé d'une entrée de map.

À savoir

  • Une map se parcourt dans l'ordre de création de ses entrées.
  • Supprimer l'élément courant dans la boucle est sans danger : la boucle continue avec le suivant. EXIT et CONTINUE marchent comme dans toute boucle.
  • FOREACH a et NEXT a sans parenthèses sont des erreurs de compilation ; NEXT seul convient. Un NEXT qui nomme une autre collection est refusé. Il n'existe pas de ENDFOREACH.
  • FOREACH ne marche pas sur les tableaux : utilisez FOR i = 0 TO a.length.
  • FOREACH déplace l'unique curseur de la collection. Un FOREACH imbriqué sur la même liste, ou un appel qui déplace le curseur, change la position de la boucle extérieure. Après un tour complet il n'y a plus d'élément courant : ListIndex() renvoie -1.

Exemple

NewList a.i()FOR k = 1 TO 5  AddElement(a())  a() = kNEXTFOREACH a()  IF Mod(a(), 2) = 0 THEN DeleteElement(a())NEXTFOREACH a()  Console(Str(a()))   ' 1, then 3, then 5NEXT a()NewMap stock.i()stock("apple") = 3stock("pear") = 5FOREACH stock()  Console(MapKey(stock()) + " = " + Str(stock()))   ' apple = 3, then pear = 5NEXT
Dans le manuel : Tableaux, listes et maps