D apresenta um loop foreach
que permite
iteração menos propensa a erros e mais legível.
Dado um array arr
do tipo int[]
, é possível
iterar sobre os elementos usando um loop foreach
:
foreach (int e; arr) {
writeln(e);
}
O primeiro parâmetro em um loop foreach
é o nome da variável
usada para cada iteração. Seu tipo pode ser inferido automaticamente da seguinte forma:
foreach (e; arr) {
// typeof(e) é int
writeln(e);
}
O segundo campo deve ser um array - ou um objeto iterável especial chamado range, que será apresentado na próxima seção.
Os elementos serão copiados do array ou range durante a iteração.
Isso é aceitável para tipos básicos, mas pode ser um problema para tipos
tipos grandes. Para evitar a cópia e permitir a mutabilidade do dado
pode ser usado o ref
:
foreach (ref e; arr) {
e = 10; // sobrescrevendo o valor
}
n
vezesD nos permite escrever iterações que devem ser executadas
n
vezes, de forma mais concisa com a sintaxe ..
:
foreach (i; 0 .. 3) {
writeln(i);
}
// 0 1 2
O último número em a ... b
é excluído do intervalo,
portanto, o corpo do loop é executado 3
vezes.
Para arrays, também é possível acessar uma variável de índice separada.
foreach (i, e; [4, 5, 6]) {
writeln(i, ":", e);
}
// 0:4 1:5 2:6
foreach_reverse
Um array pode ser iterada na ordem inversa com
foreach_reverse
:
foreach_reverse (e; [1, 2, 3]) {
writeln(e);
}
// 3 2 1