while și do-while în Dart

Repetă un bloc cât timp o condiție este adevărată; do-while execută blocul cel puțin o dată.

Sintaxă
while (conditie) {
  ...
}

do {
  ...
} while (conditie);

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-- sau i++.
  • Lipsa lui ; după } while (conditie) la do-while: Expected to find ';'.
  • while când știi numărul de pași: for pune 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.