Ce face if și else
if verifică o condiție de tip bool și execută blocul dintre acolade doar dacă este true. else if adaugă alte condiții, verificate de sus în jos, iar else prinde restul. Condiția se pune între paranteze și trebuie să fie chiar bool: Dart nu transformă automat numere sau texte în adevărat/fals.
Pentru alegeri simple între două valori există operatorul ternar conditie ? a : b.
Din Dart 3, if-case verifică un pattern și extrage valori în același timp: if (json case {'nume': String nume}) .... Variabilele din pattern există doar în blocul if.
Exemple
Exemplul 1: Calificativul unei note
Se execută doar prima ramură adevărată.
String calificativ(int nota) {
if (nota >= 9) {
return 'foarte bine';
} else if (nota >= 7) {
return 'bine';
} else if (nota >= 5) {
return 'suficient';
} else {
return 'insuficient';
}
}
void main() {
for (final nota in [10, 8, 5, 3]) {
print('nota $nota: ${calificativ(nota)}');
}
}
Rezultat
nota 10: foarte bine
nota 8: bine
nota 5: suficient
nota 3: insuficient
Exemplul 2: Operatorul ternar
? : alege o valoare în funcție de condiție, pe un singur rând.
void main() {
for (final bucati in [1, 3]) {
final text = bucati == 1 ? 'produs' : 'produse';
print('Ai $bucati $text în coș.');
}
}
Rezultat
Ai 1 produs în coș.
Ai 3 produse în coș.
Exemplul 3: if-case cu pattern
Condiția verifică forma datelor și extrage nume și varsta doar dacă au tipurile cerute.
void verifica(Map<String, Object?> date) {
if (date case {'nume': String nume, 'varsta': int varsta} when varsta >= 18) {
print('$nume poate vota.');
} else {
print('Date incomplete sau persoană minoră: $date');
}
}
void main() {
verifica({'nume': 'Ioana', 'varsta': 22});
verifica({'nume': 'Matei', 'varsta': 15});
verifica({'nume': 'Sorin'});
}
Rezultat
Ioana poate vota.
Date incomplete sau persoană minoră: {nume: Matei, varsta: 15}
Date incomplete sau persoană minoră: {nume: Sorin}
Greșeli frecvente
if (lista.length)sauif (text):Conditions must have a static type of 'bool'. Scrielista.isNotEmpty.=în loc de==în condiție:if (x = 5)nu compilează, pentru că rezultatul nu estebool.- Lanțuri lungi de
else ifpe aceeași valoare: o expresieswitcheste mai clară.
Comenzi înrudite
switch: Alege un bloc de cod după valoarea sau forma unei expresii; în Dart 3 fiecare case este un pattern.expresii switch: Forma de switch care produce o valoare: fiecare ramură este pattern => expresie.when (guard): Adaugă o condiție suplimentară la un pattern din switch sau if-case; cazul se alege doar dacă e adevărată.pattern-uri (destructurare): Desfac o valoare (record, listă, map, obiect) în variabile separate, într-o singură declarație.