break și continue în Dart

break oprește bucla imediat; continue sare peste restul repetării curente și trece la următoarea.

Sintaxă
break;            // iese din buclă
continue;         // trece la repetarea următoare
eticheta: for (...) { ... break eticheta; }

Ce face break și continue

break oprește imediat bucla (for, for-in, while, do-while) și programul continuă după ea. Este util când ai găsit ce căutai și nu mai are rost să parcurgi restul.

continue sare peste restul codului din repetarea curentă și trece la următoarea. Se folosește pentru a ignora elementele care nu te interesează, fără să indentezi tot codul într-un if.

În bucle imbricate, break și continue afectează doar bucla cea mai apropiată. Pentru a ieși din bucla exterioară, pui o etichetă înaintea ei (exterior:) și scrii break exterior;. În switch din Dart 3 nu mai e nevoie de break la finalul fiecărui case.

Exemple

Exemplul 1: break: oprire la primul găsit

Căutăm primul produs sub 10 lei și ne oprim.

void main() {
  final produse = {'Cafea': 24.0, 'Ceai': 8.5, 'Biscuiți': 6.0};
  for (final MapEntry(key: nume, value: pret) in produse.entries) {
    print('verific $nume');
    if (pret < 10) {
      print('Primul produs ieftin: $nume ($pret lei)');
      break;
    }
  }
}

Rezultat

verific Cafea
verific Ceai
Primul produs ieftin: Ceai (8.5 lei)

Exemplul 2: continue: sărim peste unele elemente

Notele sub 5 sunt ignorate la calculul mediei de promovare.

void main() {
  final note = [9, 4, 10, 3, 8];
  var suma = 0, numar = 0;
  for (final n in note) {
    if (n < 5) {
      print('ignor nota $n');
      continue;
    }
    suma += n;
    numar++;
  }
  print('Media notelor de trecere: ${suma / numar}');
}

Rezultat

ignor nota 4
ignor nota 3
Media notelor de trecere: 9.0

Exemplul 3: Etichetă pentru bucla exterioară

break cautare iese din ambele bucle când găsim locul liber.

void main() {
  final sala = [
    ['ocupat', 'ocupat', 'ocupat'],
    ['ocupat', 'liber', 'liber'],
  ];
  cautare:
  for (var r = 0; r < sala.length; r++) {
    for (var l = 0; l < sala[r].length; l++) {
      if (sala[r][l] == 'liber') {
        print('Primul loc liber: rândul ${r + 1}, locul ${l + 1}');
        break cautare;
      }
    }
  }
}

Rezultat

Primul loc liber: rândul 2, locul 2

Greșeli frecvente

  • break într-o buclă interioară crezând că oprește și bucla exterioară: folosește o etichetă.
  • break în forEach((x) { ... }): nu este o buclă, ci o funcție; break nu compilează acolo. Folosește for-in.
  • continue într-un while înainte de pasul de incrementare: contorul nu mai crește și bucla devine infinită.

Comenzi înrudite

  • for: Bucla clasică cu contor: inițializare, condiție și pas, repetată cât timp condiția este adevărată.
  • 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ă.
  • switch: Alege un bloc de cod după valoarea sau forma unei expresii; în Dart 3 fiecare case este un pattern.