Ce face stdout
Variabila globală stdout este un obiect Stdout, un IOSink legat de ieșirea standard. print scrie tot acolo, dar stdout îți dă mai mult control: scriere fără rând nou (write), liste cu separator (writeAll), octeți (add) sau un flux întreg (addStream).
Ieșirea poate fi redirecționată: dart run main.dart > raport.txt trimite tot ce scrii în stdout în fișier. Mesajele de eroare se scriu separat, în stderr, ca să nu se amestece cu datele.
stdout.hasTerminal spune dacă ieșirea merge într-un terminal (vezi stdout.hasTerminal). Înainte de exit, apelează await stdout.flush() ca să fii sigur că tot textul a fost scris.
Exemple
Exemplul 1: print și stdout scriu în același loc
import 'dart:io';
void main() {
print('Linia 1, cu print');
stdout.writeln('Linia 2, cu stdout.writeln');
stdout.writeAll(['Ana', 'Ion', 'Maria'], ', ');
stdout.writeln();
stdout.writeCharCode(0x2713);
stdout.writeln(' gata');
}
Rezultat
Linia 1, cu print
Linia 2, cu stdout.writeln
Ana, Ion, Maria
✓ gata
Exemplul 2: Un fișier copiat direct în stdout
addStream trimite octeții fișierului fără să-i încarce pe toți în memorie, ca cat în terminal.
import 'dart:io';
Future<void> main() async {
File('poezie.txt').writeAsStringSync('Pe lângă plopii fără soț\nAdesea am trecut;\n');
await stdout.addStream(File('poezie.txt').openRead());
await stdout.flush();
print('(sfârșit)');
}
Rezultat
Pe lângă plopii fără soț
Adesea am trecut;
(sfârșit)
Exemplul 3: Raport cu coloane aliniate
import 'dart:io';
void main() {
final note = {'Ana': 9.5, 'Ion': 7.25, 'Maria': 10.0};
stdout.writeln('${'Elev'.padRight(8)}Nota');
stdout.writeln('-' * 13);
for (final MapEntry(:key, :value) in note.entries) {
stdout.writeln('${key.padRight(8)}${value.toStringAsFixed(2).padLeft(5)}');
}
}
Rezultat
Elev Nota
-------------
Ana 9.50
Ion 7.25
Maria 10.00
Greșeli frecvente
- Apelezi
stdout.close()și apoiprint: ieșirea este închisă și scrierea aruncă o eroare. - Scrii mesajele de eroare în
stdout: când utilizatorul redirecționează ieșirea într-un fișier, erorile ajung amestecate cu datele. Foloseștestderr.
Comenzi înrudite
stdout.write: stdout.write scrie text fără rând nou la final; stdout.writeln adaugă rândul nou, ca print.stdout.hasTerminal: hasTerminal spune dacă ieșirea merge într-un terminal; terminalColumns dă lățimea terminalului, în caractere.stderr: stderr este ieșirea de erori a programului, separată de stdout; aici scrii avertismentele și mesajele de eroare.IOSink: Destinația în care scrii text sau octeți: un fișier deschis (openWrite), stdout, stderr sau răspunsul HTTP.stdin: stdin este intrarea standard a programului: ce scrie utilizatorul la tastatură sau ce primește programul printr-un pipe.