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() asyncpentru funcții asincrone: cine o apelează nu o poate aștepta. FoloseșteFuture<void>.- Să scrii
return valoare;într-o funcțievoid: 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ă.