main în Dart

Funcția de la care pornește orice program Dart; poate primi argumentele din linia de comandă.

Sintaxă
void main() { ... }
void main(List<String> argumente) { ... }
Future<void> main() async { ... }

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: eroarea The name 'main' is already defined.
  • void main() async cu await funcționează, dar Future<void> este forma recomandată pentru un main asincron.
  • Să crezi că argumentele sunt numere: ele sunt mereu String; le transformi cu int.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.