stdout în Dart

stdout este ieșirea standard a programului: tot ce apare în terminal; are metodele unui IOSink (write, writeln, writeAll).

Sintaxă
import 'dart:io';

Stdout get stdout
// Stdout implementează IOSink: write, writeln, writeAll, add, addStream, flush

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 apoi print: 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ște stderr.

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.