Ce face while și do-while
while verifică condiția înainte de fiecare repetare. Dacă este falsă de la început, blocul nu se execută deloc. Este potrivit când nu știi dinainte câte repetări vor fi: citești până la un rând gol, împarți un număr până ajunge la zero.
do-while verifică condiția la final, deci blocul se execută cel puțin o dată. Atenție la ; după while (conditie) la do-while: este obligatoriu.
Ieși mai devreme cu break și sari la următoarea repetare cu continue. Ai grijă ca ceva din buclă să schimbe condiția, altfel bucla nu se oprește.
Exemple
Exemplul 1: Cifrele unui număr
Împărțim la 10 cât timp numărul nu este zero. ~/ este împărțirea întreagă.
void main() {
var n = 2024;
var suma = 0;
while (n > 0) {
suma += n % 10;
n ~/= 10;
}
print('Suma cifrelor lui 2024 este $suma');
}
Rezultat
Suma cifrelor lui 2024 este 8
Exemplul 2: Citire până la rândul gol
stdin.readLineSync() dă null la sfârșitul intrării. Bucla se oprește la rândul gol.
import 'dart:io';
void main() {
final cumparaturi = <String>[];
String? rand;
while ((rand = stdin.readLineSync()) != null && rand!.isNotEmpty) {
cumparaturi.add(rand);
}
print('Listă: ${cumparaturi.join(', ')}');
}
Ce scrie utilizatorul (intrare)
pâine
lapte
ouă
Rezultat
Listă: pâine, lapte, ouă
Exemplul 3: do-while: cel puțin o dată
Chiar dacă soldul este deja sub limită, blocul rulează o dată înainte de verificare.
void main() {
var sold = 30.0;
var luna = 0;
do {
luna++;
sold -= 12.5;
print('Luna $luna: sold ${sold.toStringAsFixed(2)} lei');
} while (sold > 0);
}
Rezultat
Luna 1: sold 17.50 lei
Luna 2: sold 5.00 lei
Luna 3: sold -7.50 lei
Greșeli frecvente
- Bucla infinită: condiția nu se schimbă niciodată pentru că ai uitat
n--saui++. - Lipsa lui
;după} while (conditie)lado-while:Expected to find ';'. whilecând știi numărul de pași:forpune contorul și pasul într-un singur loc.
Comenzi înrudite
for: Bucla clasică cu contor: inițializare, condiție și pas, repetată cât timp condiția este adevărată.break și continue: break oprește bucla imediat; continue sare peste restul repetării curente și trece la următoarea.for-in: Parcurge pe rând elementele unei liste, unui set sau oricărui Iterable, fără indice.