Ce face main
Orice program Dart care se rulează direct are o funcție de nivel superior numită main. Când scrii dart run main.dart, Dart încarcă fișierul și apelează main(). Programul se termină când main se încheie și nu mai există lucru asincron în așteptare (timere, fișiere deschise, Future-uri).
main are trei forme obișnuite: fără parametri, cu un parametru List<String> care primește argumentele scrise după numele fișierului, și forma asincronă Future<void> main() async, în care poți folosi await direct.
Tipul returnat este de obicei void. Dacă vrei ca programul să se termine cu un cod de ieșire anume (folosit de scripturi), setezi exitCode sau apelezi exit() din dart:io.
Parametri
| Parametru | Descriere |
|---|---|
argumente |
Opțional. List<String> cu argumentele din linia de comandă: dart run main.dart Ana 10 dă ['Ana', '10']. Numele parametrului este la alegere. |
Exemple
Exemplul 1: Cel mai simplu program
main fără parametri. print scrie un rând pe ecran.
void main() {
print('Bună, Ana!');
print('Primul tău program Dart rulează.');
}
Rezultat
Bună, Ana!
Primul tău program Dart rulează.
Exemplul 2: Argumente din linia de comandă
Aici programul este rulat fără argumente, așa că lista este goală și se folosește un nume implicit. Cu dart run main.dart Mihai ar afișa „Bună, Mihai!”.
void main(List<String> argumente) {
print('Am primit ${argumente.length} argumente: $argumente');
final nume = argumente.isEmpty ? 'vizitator' : argumente.first;
print('Bună, $nume!');
}
Rezultat
Am primit 0 argumente: []
Bună, vizitator!
Exemplul 3: main asincron
Cu async, main poate aștepta rezultate cu await. Programul se termină după ultimul await.
Future<int> numaraElevi() async {
await Future.delayed(const Duration(milliseconds: 100));
return 28;
}
Future<void> main() async {
print('Citesc catalogul...');
final elevi = await numaraElevi();
print('Clasa are $elevi de elevi.');
}
Rezultat
Citesc catalogul...
Clasa are 28 de elevi.
Greșeli frecvente
- Două funcții
mainîn același fișier: eroareaThe name 'main' is already defined. void main() asynccuawaitfuncționează, darFuture<void>este forma recomandată pentru unmainasincron.- Să crezi că argumentele sunt numere: ele sunt mereu
String; le transformi cuint.parse.
Comenzi înrudite
funcții: Blocuri de cod cu nume, care primesc parametri și returnează o valoare; în Dart sunt și obiecte.async și await: async marchează o funcție asincronă (întoarce Future), iar await așteaptă rezultatul unui Future fără să blocheze programul.dart run: Rulează un program Dart: un fișier, programul principal al proiectului sau un executabil dintr-un pachet.void: Tipul returnat de funcțiile care nu întorc nicio valoare folositoare.