return în Dart

Încheie funcția curentă și întoarce o valoare celui care a apelat-o.

Sintaxă
return expresie;
return;              // în funcții void
Tip f() => expresie;  // return implicit

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 int care 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 callback forEach crezâ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.