Ce face exit
exit(cod) din dart:io termină programul pe loc. Codul de ieșire ajunge la cine a pornit programul (terminalul, un script, CI-ul): 0 înseamnă succes, iar 1–255 înseamnă diferite erori. În terminal îl vezi cu echo $?.
Tipul returnat este Never: după exit nu se mai execută nimic, iar analizorul știe asta (de exemplu, o variabilă nullable verificată înainte de exit devine sigură după). Operațiile asincrone neterminate, inclusiv scrieri în fișiere, se pierd; apelează await stdout.flush() și închide fișierele înainte.
O variantă mai blândă este variabila globală exitCode: o setezi (exitCode = 1;) și programul se termină normal, cu acel cod, după ce toate operațiile asincrone s-au încheiat.
Parametri
| Parametru | Descriere |
|---|---|
code |
Codul de ieșire: 0 pentru succes, 1–255 pentru erori. |
Exemple
Exemplul 1: Oprire după afișarea ajutorului
Programul nu primește argumente, deci afișează ajutorul și se oprește cu codul 0; ultimul print nu se mai execută.
import 'dart:io';
void main(List<String> args) {
if (args.isEmpty) {
print('Utilizare: dart run main.dart <fișier-note>');
print('Calculează media notelor din fișier.');
exit(0);
}
print('Prelucrez ${args.first}...');
}
Rezultat
Utilizare: dart run main.dart <fișier-note>
Calculează media notelor din fișier.
Exemplul 2: Eroare semnalată cu un cod diferit de 0
Rulat în terminal; echo $? afișează codul cu care s-a terminat programul.
import 'dart:io';
void main() {
final fisier = File('note.csv');
if (!fisier.existsSync()) {
stderr.writeln('Eroare: lipsește fișierul ${fisier.path}');
exit(2);
}
print(fisier.readAsStringSync());
}
Rezultat în terminal (dart run main.dart; echo $?)
Eroare: lipsește fișierul note.csv
2
Exemplul 3: exit după ce datele au fost scrise
Fișierul este închis cu await înainte de exit, deci raportul este complet.
import 'dart:io';
Future<void> main() async {
final raport = File('raport.txt').openWrite();
raport.writeln('Vânzări Iași: 1200 lei');
raport.writeln('Vânzări Cluj: 950 lei');
await raport.close();
print('Raport salvat: ${File('raport.txt').readAsLinesSync().length} rânduri.');
await stdout.flush();
exit(0);
}
Rezultat
Raport salvat: 2 rânduri.
Greșeli frecvente
- Apelezi
exitimediat dupăwriteAsStringfărăawait: fișierul poate rămâne gol sau neterminat. - Folosești
exitîntr-o aplicație Flutter: aplicația dispare brusc, iar pe iOS asta încalcă regulile App Store. În consolă și pe server este în regulă. - Folosești coduri mai mari de 255: pe macOS și Linux se păstrează doar ultimii 8 biți, deci
exit(256)apare ca 0.
Comenzi înrudite
stderr: stderr este ieșirea de erori a programului, separată de stdout; aici scrii avertismentele și mesajele de eroare.stdout: stdout este ieșirea standard a programului: tot ce apare în terminal; are metodele unui IOSink (write, writeln, writeAll).ProcessResult: Rezultatul lui Process.run: codul de ieșire și tot ce a scris programul în stdout și în stderr.sleep: Oprește complet execuția programului (isolate-ul curent) pentru durata dată; nimic altceva nu rulează între timp.