Ce face for
Bucla for clasică are trei părți între paranteze, separate prin ;: inițializarea (var i = 0), condiția verificată înaintea fiecărei repetări (i < n) și pasul executat după fiecare repetare (i++). Oricare parte poate lipsi; for (;;) este o buclă infinită.
Este potrivită când ai nevoie de poziție (indice), când mergi din doi în doi sau înapoi. Pentru a parcurge pur și simplu elementele unei liste, for-in este mai scurt.
În Dart fiecare repetare are propria copie a lui i: funcțiile create în buclă (closure-uri) își amintesc valoarea din repetarea lor, nu ultima valoare.
Parametri
| Parametru | Descriere |
|---|---|
inițializare |
Se execută o dată, la început. Poți declara mai multe variabile: var i = 0, j = 10. |
condiție |
Bucla continuă cât timp este true. |
pas |
Se execută după fiecare repetare: i++, i += 2, i--. |
Exemple
Exemplul 1: Tabla înmulțirii cu 7
Contorul merge de la 1 la 10.
void main() {
for (var i = 1; i <= 10; i++) {
print('7 x $i = ${7 * i}');
}
}
Rezultat
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
Exemplul 2: Indice și pas diferit
Mergem înapoi prin listă, apoi luăm fiecare al doilea element.
void main() {
final orase = ['Iași', 'Cluj', 'Timișoara', 'Brașov', 'Constanța'];
for (var i = orase.length - 1; i >= 0; i--) {
print('${i + 1}. ${orase[i]}');
}
for (var i = 0; i < orase.length; i += 2) {
print('din doi în doi: ${orase[i]}');
}
}
Rezultat
5. Constanța
4. Brașov
3. Timișoara
2. Cluj
1. Iași
din doi în doi: Iași
din doi în doi: Timișoara
din doi în doi: Constanța
Exemplul 3: Fiecare repetare are propriul i
Funcțiile salvate în listă își amintesc valoarea lui i din repetarea în care au fost create.
void main() {
final actiuni = <void Function()>[];
for (var i = 1; i <= 3; i++) {
actiuni.add(() => print('acțiunea $i'));
}
for (final a in actiuni) {
a();
}
}
Rezultat
acțiunea 1
acțiunea 2
acțiunea 3
Greșeli frecvente
i <= lista.lengthîn loc de<: ultimul pas aruncăRangeError.- Modificarea listei (adăugare/ștergere) în timp ce o parcurgi cu indice: poți sări elemente sau intra în buclă infinită.
- Folosirea lui
forcu indice când nu ai nevoie de el:for (final x in lista)este mai clar.
Comenzi înrudite
for-in: Parcurge pe rând elementele unei liste, unui set sau oricărui Iterable, fără indice.while și do-while: Repetă un bloc cât timp o condiție este adevărată; do-while execută blocul cel puțin o dată.break și continue: break oprește bucla imediat; continue sare peste restul repetării curente și trece la următoarea.collection if și for: if și for direct în interiorul unei liste, set sau map, pentru a construi colecția dintr-o singură expresie.