void în Dart

Tipul returnat de funcțiile care nu întorc nicio valoare folositoare.

Sintaxă
void numeFunctie() { ... }
Future<void> numeFunctie() async { ... }
void Function(String) callback;

Ce face void

void spune că o funcție nu returnează nimic util. Se folosește pentru funcții care fac ceva (afișează, scriu un fișier, modifică o listă) în loc să calculeze un rezultat. Într-o funcție void poți scrie return; fără valoare, ca să ieși mai devreme.

Pentru funcții asincrone care nu întorc nimic, tipul este Future<void>: cine le apelează poate aștepta să se termine cu await, chiar dacă nu primește o valoare.

Analizorul nu te lasă să folosești rezultatul unei expresii void: print(lista.add(3)) dă eroare, pentru că add este void.

Exemple

Exemplul 1: Funcție care doar afișează

afiseazaChitanta nu returnează nimic; return; o oprește mai devreme pentru un coș gol.

void afiseazaChitanta(Map<String, double> cos) {
  if (cos.isEmpty) {
    print('Coșul este gol.');
    return;
  }
  cos.forEach((produs, pret) => print('$produs: $pret lei'));
}

void main() {
  afiseazaChitanta({});
  afiseazaChitanta({'Pâine': 4.5, 'Lapte': 7.2});
}

Rezultat

Coșul este gol.
Pâine: 4.5 lei
Lapte: 7.2 lei

Exemplul 2: Future așteptat cu await

salveaza nu returnează nimic, dar main așteaptă să se termine înainte de a merge mai departe.

Future<void> salveaza(String nume) async {
  await Future.delayed(const Duration(milliseconds: 50));
  print('$nume a fost salvat.');
}

Future<void> main() async {
  await salveaza('Raport Iași');
  print('Gata.');
}

Rezultat

Raport Iași a fost salvat.
Gata.

Exemplul 3: Callback de tip void Function

Parametrul laFiecare este o funcție care primește un String și nu returnează nimic.

void parcurge(List<String> nume, void Function(String) laFiecare) {
  for (final n in nume) {
    laFiecare(n);
  }
}

void main() {
  parcurge(['Ana', 'Radu', 'Elena'], (n) => print('Salut, $n!'));
}

Rezultat

Salut, Ana!
Salut, Radu!
Salut, Elena!

Greșeli frecvente

  • print(lista.add(5));: This expression has a type of 'void' so its value can't be used.
  • void f() async pentru funcții asincrone: cine o apelează nu o poate aștepta. Folosește Future<void>.
  • Să scrii return valoare; într-o funcție void: analizorul o semnalează ca greșeală.

Comenzi înrudite

  • funcții: Blocuri de cod cu nume, care primesc parametri și returnează o valoare; în Dart sunt și obiecte.
  • return: Încheie funcția curentă și întoarce o valoare celui care a apelat-o.
  • async și await: async marchează o funcție asincronă (întoarce Future), iar await așteaptă rezultatul unui Future fără să blocheze programul.
  • main: Funcția de la care pornește orice program Dart; poate primi argumentele din linia de comandă.