Ce face return
return valoare; oprește imediat funcția și trimite valoarea înapoi. Codul de după return din același bloc nu se mai execută. O funcție cu tip returnat nenul (int, String) trebuie să ajungă la un return pe orice drum, altfel analizorul dă eroare.
În funcțiile void, return; fără valoare servește la ieșirea mai devreme. Funcțiile scrise cu => au return implicit: int dublu(int x) => x * 2;.
Pentru mai multe valori deodată, returnează un record: return (minim, maxim);. Într-o funcție async, return x; completează Future-ul cu x.
Exemple
Exemplul 1: Returnare timpurie
Cazurile greșite sunt tratate la început, cu return, ca restul funcției să rămână simplu.
String retrage(double sold, double suma) {
if (suma <= 0) return 'sumă invalidă';
if (suma > sold) return 'fonduri insuficiente';
return 'ai retras $suma lei, rămân ${sold - suma} lei';
}
void main() {
print(retrage(500, -5));
print(retrage(500, 800));
print(retrage(500, 120));
}
Rezultat
sumă invalidă
fonduri insuficiente
ai retras 120.0 lei, rămân 380.0 lei
Exemplul 2: Mai multe valori cu un record
Funcția întoarce minimul și maximul într-un record, desfăcut apoi în două variabile.
(int, int) extreme(List<int> valori) {
var min = valori.first, max = valori.first;
for (final v in valori) {
if (v < min) min = v;
if (v > max) max = v;
}
return (min, max);
}
void main() {
final (minim, maxim) = extreme([12, -3, 27, 8]);
print('Temperatura minimă: $minim °C, maximă: $maxim °C');
}
Rezultat
Temperatura minimă: -3 °C, maximă: 27 °C
Exemplul 3: return în funcție void
return; oprește funcția fără să întoarcă nimic.
void trimiteMesaj(String? destinatar) {
if (destinatar == null) {
print('Nu am destinatar, nu trimit.');
return;
}
print('Trimit mesajul către $destinatar.');
}
void main() {
trimiteMesaj(null);
trimiteMesaj('ana@exemplu.ro');
}
Rezultat
Nu am destinatar, nu trimit.
Trimit mesajul către ana@exemplu.ro.
Greșeli frecvente
- Funcție
intcare nu returnează pe toate ramurile:The body might complete normally, causing 'null' to be returned, but the return type, 'int', is a potentially non-nullable type. returnîntr-un callbackforEachcrezând că iese din funcția exterioară: iese doar din callback.- Cod după
returnîn același bloc: nu se execută niciodată (analizorul îl marcheazădead_code).
Comenzi înrudite
funcții: Blocuri de cod cu nume, care primesc parametri și returnează o valoare; în Dart sunt și obiecte.funcții săgeată (=>): Forma scurtă a unei funcții: => expresie înseamnă { return expresie; }.void: Tipul returnat de funcțiile care nu întorc nicio valoare folositoare.records: Grupuri de valori anonime și imutabile, de forma (a, b) sau (nume: a), ideale pentru a întoarce mai multe valori.