for în Dart

Bucla clasică cu contor: inițializare, condiție și pas, repetată cât timp condiția este adevărată.

Sintaxă
for (var i = 0; i < n; i++) {
  ...
}

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 for cu 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.