for ... to ... do

For To Do permet de définir des boucles utilisant un itérateur numérique entier.

   for [var] <loopVariable> := <startBound> {to|downto} <endBound> [step <stepValue>] do

L'exécution de la boucle peut être interrompue ou modifiée par break et continue.

La variable de boucle (i dans l'exemple ci-dessus) doit nécessairement être une variable locale de type Integer.
Cette variable n'est pas modifiable par le code à l'intérieur de la boucle.

Croissante ou descendante

Deux formes sont possibles, selon si la boucle est croissante ou décroissante:

for i := 1 to 10 do ... // i va partir de 1 et s'incrémenter de 1 en 1 jusqu'à 10
for i := 10 downto 1 do ... // i va partir de 10 et se décrémenter de 1 en 1 jusqu'à 1

Les bornes basses et hautes, ainsi que le pas, sont évaluées uniquement à l'entrée de la boucle, si les bornes ne sont pas cohérentes, par exemple une borne haute inférieure à la borne basse pour une boucle ascendante, la boucle ne sera pas entrée.

Pas de boucle

L'utilisation de step est optionnelle :

  • si absent, la valeur par défaut est 1
  • si présent, il doit spécifier une valeur entière strictement positive.
for i := 1 to 10 step 2 do ... // i va partir de 1 et s'incrémenter de 2 en 2 jusqu'à 9
for i := 10 downto 1 step 2 do ... // i va partir de 10 et se décrémenter de 2 en 2 jusqu'à 2

Déclaration combinée

A partir de Qubes 6.1 il est possible de combiner la déclaration de variable de boucle avec la boucle en débutant par for var:

  • le type de la variable ainsi créée est déduit automatiquement, et la variable n'est accessible qu'au sein de la boucle.
for var i := 1 to 5 do ...;  
for var i := 2 to 10 do ...;  // OK
Print(i); // ERREUR!
  • le nom de la variable de boucle ainsi déclarée ne doit pas exister dans la portée locale.
var i : Integer;
for i := functionCall() to i+5 do ...  // ERREUR!
  • il est possible d'utiliser la variable pour calculer l'expression to/downto.
for i := functionCall() to i+5 do ...