Article image
Matheus Cardoso
Matheus Cardoso24/08/2023 14:14
Compartilhe

[Dart] Print() Vs Stdout.write()

    É de conhecimento de todo programador que conhece a linguagem Dart que o método para exibir algo no console é o print(object), correto?

    Mas falando sobre testes, mais especificamente, é um tanto complicado quando precisamos testar um método ou função que imprima algo no console. Como saber se o print foi chamado corretamente? Como saber se foram escritas a quantidades de linhas corretas?É aí que entra o poderoso Stdout da biblioteca 'dart:io'.

    O stdout.write(object) por exemplo, exibe no console o que é desejado mas sem pular uma linha (coisa que o print() faz automaticamente). Caso você deseje que pule uma linha poderá então usar o stdout.writeln(), pois ele exibirá no console e depois pulará uma linha.

    Mas por que isso é tão legal?

    Bom, esteticamente, quando você deseja receber algum dado digitado no console você pode utilizar do método write para não pular a linha. Ex:

    String pegaDado (String texto) {
    stdout.write(texto);
    String resposta = stdin.readLineSync() ?? '';
    
    return resposta;
    }
    
    pegadado('Digite seu nome: ');
    

    No console aparecerá algo assim:

    Digite seu nome: 
    

    Até aí nada de anormal, exceto que, diferente do print() a resposta que o usuário digitar estará ao lado do texto, o que esteticamente é mais correto.

    No entanto os benefícios não são somente estéticos.

    Esta biblioteca fornece acesso aos dados que são exibidos e digitados no console, fazendo assim com que, a nível de testes, fique mais fácil a gente testar aquela void function().

    Resumindo as vantagens de usar o Stdout são:

    Controle sobre a Saída: Ao usar stdout.write(), você tem um controle mais granular sobre o que está sendo escrito na saída padrão. Isso pode ser útil ao testar funções ou unidades específicas, onde você deseja que a saída seja precisa e previsível.

    Formatação Precisa: Em testes, a formatação da saída pode ser crucial para verificar se os resultados estão corretos. Usando stdout.write(), você pode formatar a saída exatamente como deseja, sem quebras de linha ou espaços extras que possam interferir na comparação dos resultados esperados.

    Menos Interferência: O uso do print() em testes pode ser problemático, já que ele adiciona automaticamente uma quebra de linha no final de cada chamada. Isso pode causar confusão e dificultar a comparação precisa da saída, especialmente quando você está testando partes específicas do código.

    Testes de Integração: Em cenários de testes de integração, onde você pode estar interagindo com sistemas externos ou APIs, usar stdout.write() pode ser útil para exibir informações de depuração ou logs relevantes, permitindo que você acompanhe o processo de interação com mais detalhes.

    Logicamente, o print() tem suas utilizações e mesmo o stdout.write() não é a única ou melhor maneira de se testar em Dart. Vale, como programadores, decidir o que melhor nos cabe com relação a utilização de métodos e bibliotecas.

    Compartilhe
    Comentários (0)