Adicionando tabelas ao seu console - Série Spectre Console
Spectre.Console é uma poderosa biblioteca .NET que ajuda você a criar aplicativos de console com design elegante. Em vez de exibir apenas texto, você pode criar layouts estruturados, usar cores e até mesmo mostrar barras de progresso ou avisos interativos. Em sua série Spectre Console, Tim Corey mostra aos desenvolvedores como aproveitar ao máximo essa biblioteca em lições práticas e concisas.
Em seu vídeo " Adicionando tabelas ao seu console - Série Spectre Console ", Tim se concentra nas tabelas do Spectre.Console. As tabelas são um recurso fundamental que permite exibir dados estruturados com alinhamento, espaçamento, bordas e estilos. Vamos analisar mais detalhadamente o passo a passo do Tim para que você possa ver exatamente como usar esse recurso.
Primeiros passos com o Spectre.Console
No início (0:00), Tim explica que o Spectre.Console permite criar aplicativos visualmente atraentes e informativos. Ele é distribuído como um pacote NuGet chamado Spectre.Console. Você pode instalá-lo facilmente com:
// dotnet add package spectre console
dotnet add package Spectre.Console
// dotnet add package spectre console
dotnet add package Spectre.Console
Uma vez instalada, a biblioteca facilita muito a apresentação de informações em um aplicativo de console. Tim também indica os links para a documentação e o código-fonte fornecidos com o vídeo para quem estiver interessado em mais exemplos.
Criando sua primeira mesa
Tim começa a programar em 0:35. Ele cria um objeto Tabela:
var table = new Table();
var table = new Table();
Em seguida, ele adiciona três colunas com AddColumn:
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");
Isso cria a estrutura básica. Ele explica que cada coluna poderá posteriormente ter sua própria largura, alinhamento e estilo.
Em seguida, ele adiciona linhas com AddRow. Tim, às 13h06, diz que existem três maneiras suportadas de adicionar linhas:
-
Uma lista de parâmetros de objetos IRenderable (para itens aninhados como um painel, outra tabela ou até mesmo gráficos).
-
Uma lista de parâmetros contendo strings (a mais comum).
- Um IEnumerável
(menos comum, mas disponível).
Ele demonstra primeiro a segunda opção, acrescentando:
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");
Isso insere duas linhas de dados na tabela. Aos 3:26, Tim lembra aos espectadores que é preciso usar AnsiConsole.Write(table) (e não WriteLine) para exibir um IRenderable como uma tabela no terminal:
AnsiConsole.Write(table);
AnsiConsole.Write(table);
Ao executar o programa, o console exibe uma tabela formatada de forma organizada, com os cabeçalhos e as linhas alinhados automaticamente. Mesmo com apenas algumas linhas de código, o Spectre faz com que a saída do console pareça muito mais profissional.

Alinhando e expandindo a tabela
Às 4:00, Tim mostra como controlar a posição da mesa na tela. Por exemplo:
table.Centered();
table.Centered();
Isso exibirá a tabela inteira no centro da janela do console. Ele explica que essa configuração afeta a tabela como um todo, e não as colunas individualmente. Você também pode alinhar a tabela à direita ou à esquerda. A opção padrão é esquerda.

Em seguida, aos 5:01, ele demonstra o uso de table.Expand(), que faz com que a tabela ocupe toda a largura da janela do terminal. Uma vez expandida, a centralização não tem efeito porque a tabela agora ocupa todo o espaço disponível. A opção padrão é uma tabela recolhida.

Adicionando bordas e entendendo o suporte ao terminal
Em seguida, Tim adiciona uma borda às 5:21:
table.Border(TableBorder.Rounded);
table.Border(TableBorder.Rounded);
Ele executa o aplicativo no console do Visual Studio e percebe que os cantos não estão arredondados. Às 5h54, ele muda para o Terminal do Windows e executa o comando novamente — agora os cantos arredondados aparecem.
Tim explica (5:59) que as capacidades de renderização dependem do terminal que você está usando. O shell subjacente apenas fornece a saída, mas o terminal decide quais estilos podem ser exibidos. O Terminal do Windows suporta caracteres com bordas arredondadas; O console integrado do Visual Studio não faz isso. O mesmo se aplica a cores, formatação ou quaisquer estilos de texto em itálico, sublinhado ou negrito que você possa adicionar.
Ele demonstra aos 7:01 que até mesmo o Prompt de Comando do Desenvolvedor fora do Visual Studio é renderizado corretamente porque utiliza um terminal diferente. Este é um ponto importante a ter em mente se você estiver experimentando recursos do Spectre, como barras de progresso, tarefas de longa duração ou tabelas: nem todos os terminais conseguem exibir todos os estilos.
Adicionando separadores de linha
Tim também destaca que você pode exibir separadores entre as linhas para maior clareza:
table.ShowRowSeparators();
table.ShowRowSeparators();
Isso cria uma linha horizontal entre cada linha, o que pode facilitar a leitura de informações em tabelas maiores — especialmente ao criar ferramentas de linha de comando que exibem muitas saídas ou lidam com argumentos dinamicamente.
Estilização em nível de coluna: preenchimento, largura, alinhamento
Um dos pontos fortes das tabelas do Spectre.Console é o quanto você pode personalizar cada coluna individualmente. Às 8h02, Tim modifica a primeira coluna:
table.Columns[0].PadLeft(5).PadRight(5);
table.Columns[0].PadLeft(5).PadRight(5);
Isso adiciona espaço em ambos os lados do texto. Em seguida, ele define uma largura fixa para a segunda coluna:
table.Columns[1].Width(15);
table.Columns[1].Width(15);
Por fim, ele alinha o conteúdo dessa coluna à direita:
table.Columns[1].RightAligned();
table.Columns[1].RightAligned();
Quando ele executar o programa novamente às 9h10, você poderá ver a primeira coluna com espaçamento interno, a segunda coluna com largura fixa e o conteúdo alinhado à direita. Até mesmo o texto do cabeçalho respeita essas configurações. Tim observa (8:42) que as larguras são medidas em caracteres, não em pixels.
Esses pequenos detalhes — espaçamento, alinhamento e larguras fixas — tornam seus aplicativos de console muito mais legíveis. Combinando as cores, a formatação e os painéis do Spectre, você pode criar uma saída que se assemelha mais a uma interface gráfica, mas que é executada inteiramente em um console.

Adicionando linhas de IEnumerable
Às 9h25, Tim demonstra a terceira maneira de adicionar uma linha — passando um IEnumerable.
var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);
var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);
Isso insere outra linha usando uma coleção. Tim comenta que essa opção "não é muito útil" no código do dia a dia, mas é compatível se você estiver gerando linhas dinamicamente a partir de outra fonte, como dados de um arquivo, uma estrutura de teste de unidade ou um prompt interativo.

Concluindo
No final do vídeo (9:59), Tim resume: As tabelas do Spectre.Console oferecem muitos recursos para apresentar informações de forma organizada e estruturada. Você pode controlar o alinhamento, a largura e o estilo da borda da tabela, adicionar separadores de linha, aplicar espaçamento às colunas e até mesmo incorporar painéis ou outros elementos renderizáveis.
Como a biblioteca é fortemente inspirada no design moderno de interfaces de linha de comando (CLI), ela suporta não apenas tabelas, mas também indicadores de progresso para tarefas de longa duração, gráficos, formatação para negrito, itálico, sublinhado e cores (como texto azul ou verde), e muito mais. Tim incentiva os espectadores a consultarem a documentação e experimentarem os exemplos para verem como o Spectre pode tornar a saída do console mais interessante.
Seguindo a demonstração passo a passo de Tim Corey, você verá como o Spectre.Console permite criar aplicativos de console incríveis com o mínimo de esforço. Instale o pacote NuGet , explore a API e comece hoje mesmo a transformar a saída simples do seu console em exibições estruturadas e estilizadas.
