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înforEach((x) { ... }): nu este o buclă, ci o funcție;breaknu compilează acolo. Foloseștefor-in.continueîntr-unwhileî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.