En D, on peut utiliser les boucles foreach
qui sont
plus lisibles et réduisent les possibilités d'erreurs.
Avec un tableau tab
de type int[]
, il est possible
d'itérer sur ses éléments en utilisant une boucle
foreach
:
foreach(int e; tab)
{
writeln(e);
}
Le premier champ de l'appel à foreach
est le nom de
la variable qui sera utilisée dans l'itération. Son
type peut être déduit automatiquement :
foreach(e; tab)
{
assert(typeof(e).stringof == "int"); // e est un int
}
Le second champ doit être un tableau, ou un objet spécial sur lequel on peut itérer, qu'on appelle range et qu'on introduira dans le prochain chapitre.
Les éléments seront copiés depuis le tableau ou la range
pendant l'itération. C'est acceptable pour des types
fondamentaux mais peut devenir très problématique pour des
types plus grands. Pour empêcher la copie ou pour pouvoir
modifier les éléments dans la boucle, ref
peut être
utilisé :
foreach(ref e; tab)
{
e = 10; // overwrite value
}
n
foisD permet d'écrire des boucles qui doivent être exécutées
n
fois de manière concise avec la syntaxe ..
:
foreach(i; 0..3)
{
writeln(i);
}
// 0 1 2
Le dernier nombre dans a..b
est exclu de l'intervalle,
cette boucle est donc éxecutée 3
fois.
Pour les tableaux, il est également possible d'accéder à l'index en le stockant dans une variable :
foreach(i, e; [4,5,6])
{
writeln(i, ":", e);
}
// 0:4 1:5 2:6
foreach_reverse
On peut itérer sur une collection à l'envers avec
foreach_reverse
:
foreach_reverse (e; [1,2,3])
{
writeln(e);
}
// 3 2 1