Ce face Iterable.forEach
forEach rulează funcția primită pentru fiecare element. Nu returnează nimic; este folosit pentru efecte, de exemplu afișare sau adunare într-o variabilă.
În majoritatea cazurilor o buclă for (final x in lista) este mai clară și permite break, continue și await. forEach este comod când ai deja o funcție gata făcută, de exemplu lista.forEach(print).
Parametri
| Parametru | Descriere |
|---|---|
action |
Funcția apelată cu fiecare element. |
Ce returnează
Nimic (void).
Exemple
Exemplul 1: Afișare cu forEach și cu o funcție existentă
void main() {
final cumparaturi = ['pâine', 'lapte', 'ouă'];
cumparaturi.forEach(print);
var total = 0.0;
[4.5, 7.2, 12.0].forEach((pret) => total += pret);
print('Total: ${total.toStringAsFixed(2)} lei');
}
Rezultat
pâine
lapte
ouă
Total: 23.70 lei
Exemplul 2: Varianta cu for-in, care permite break
Din forEach nu poți ieși mai devreme; cu for-in poți.
void main() {
final temperaturi = [12, 15, 31, 18, 33];
for (final t in temperaturi) {
if (t > 30) {
print('Caniculă: $t °C, mă opresc');
break;
}
print('ok: $t °C');
}
}
Rezultat
ok: 12 °C
ok: 15 °C
Caniculă: 31 °C, mă opresc
Greșeli frecvente
- Scrii
lista.forEach((x) async { await ... })și te aștepți ca operațiile să ruleze pe rând.forEachnu așteaptă funcțiile async; foloseștefor-incuawaitsauFuture.forEach. - Încerci
returndin funcția dată luiforEachca să oprești bucla.returniese doar din apelul curent, iar bucla continuă.
Comenzi înrudite
Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.Map.forEach: Cheamă o funcție pentru fiecare pereche cheie–valoare din map, în ordinea din map.Future.forEach: forEach rulează o acțiune asincronă pe rând pentru fiecare element; doWhile repetă o acțiune cât timp returnează true.Stream.forEach: Cheamă o funcție pentru fiecare valoare din stream și dă un Future care se termină la închiderea stream-ului.