View on GitHub

aulas-programacao-csharp

Materiais de Aula - Programação de Computadores com C#

Pacotes

📽 Veja esta vídeo-aula no Youtube

Podemos incluir referência a pacotes (bibliotecas) disponibilizadas por terceiros. O principal repositório de pacotes para .NET é o NuGet.

Agora um exemplo.

Digamos que temos um trecho de programa que exibe um evento, que possui um nome e a data/hora que ocorreu armazenada em um DateTime.

DateTime evento = new DateTime(2001, 9, 11, 8, 46, 0);
Console.Write("Ataque ao WTC: ");
Console.WriteLine(evento);

A saída será:

Ataque ao WTC: 11/09/2001 08:46:00

Digamos que para o progama desejado seja mais interessante saber a quanto tempo se passou o evento, e não a data e a hora específica, exatamente como em linhas do tempo de redes sociais.

O problema é que o .NET não disponibiliza ferramentas para isso. Poderíamos fazê-lo, mas buscamos por uma saída mais rápida.

Há um pacote gratuito chamado Humanizer disponível no NuGet que, entre outras coisas, faz exatamente isso para nós. Vamos instalar o pacote em nosso projeto.

Verificando os pacotes já instalados

PS C:\Users\ermogenes\Desktop\code\Eventos> dotnet list package
O projeto 'Eventos' tem as seguintes referências de pacote
   [netcoreapp3.1]: Nenhum pacote foi encontrado para essa estrutura.

Percebe-se que nenhum pacote ainda foi incluído.

Instalando um pacote

PS C:\Users\ermogenes\Desktop\code\Eventos> dotnet add package Humanizer
  Writing C:\Users\ermogenes\AppData\Local\Temp\tmp1C33.tmp
info : Adicionando PackageReference do pacote 'Humanizer' ao projeto 'C:\Users\ermogenes\Desktop\code\Eventos\Eventos.csproj'.
info : Restaurando pacotes para C:\Users\ermogenes\Desktop\code\Eventos\Eventos.csproj...
info :   GET https://api.nuget.org/v3-flatcontainer/humanizer/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/humanizer/index.json 568ms
info : O pacote 'Humanizer' é compatível com todas as estruturas especificadas no projeto 'C:\Users\ermogenes\Desktop\code\Eventos\Eventos.csproj'.
info : PackageReference do pacote 'Humanizer' versão '2.7.9' adicionada ao arquivo 'C:\Users\ermogenes\Desktop\code\Eventos\Eventos.csproj'.
info : Confirmando restauração...
info : Gravando o arquivo de ativos no disco. Caminho: C:\Users\ermogenes\Desktop\code\Eventos\obj\project.assets.json
log  : Restauração concluída em 1,54 sec para C:\Users\ermogenes\Desktop\code\Eventos\Eventos.csproj.

Conferindo se a instalação funcionou:

PS C:\Users\ermogenes\Desktop\code\Eventos> dotnet list package
O projeto 'Eventos' tem as seguintes referências de pacote
   [netcoreapp3.1]: 
   Pacote de Nível Superior      Solicitado   Resolvido
   > Humanizer                   2.7.9        2.7.9

Também podemos conferir a referência através do arquivo .csproj do projeto:

Utilizando o pacote em nosso código

No início de cada arquivo C# devemos adicionar todas as referências a serem utilizadas pelo código desse arquivo.

Para disponibilizar as funcionalidades de Humanizer nesse arquivo, adicionamos o seguinte comando:

using Humanizer;

Antes tínhamos somente referência a System, que nos permite, por exemplo, utilizar Console.WriteLine.

Humanizer adiciona a objetos do tipo DateTime o método Humanize, que retorna um texto amigável exatamente como desejamos.

Vamos utilizá-lo:

Console.WriteLine(evento.Humanize());

O resultado agora será:

PS C:\Users\ermogenes\Desktop\code\Eventos> dotnet run
Ataque ao WTC: 18 anos atrás

Nosso código completo será:

using System;
using Humanizer;

namespace Eventos
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime evento = new DateTime(2001, 9, 11, 8, 46, 0);
            Console.Write("Ataque ao WTC: ");
            Console.WriteLine(evento.Humanize());
        }
    }
}

Esse pacote contém muitas funcionalidades incrivelmente úteis. Mais detalhes sobre o Humanizer aqui.

Programa da vídeo-aula

using System;
using Figgle;
using Humanizer;

namespace AulaPacotes
{
    class Program
    {
        static void Main(string[] args)
        {
            // Instalando pacotes via NuGet
            // Fazendo referência a um pacote
            // Figgle: criando textos em ASCII art
            Console.WriteLine("--- Figgle: criando textos em ASCII art");
            string textao = FiggleFonts.Standard.Render("Dev C#");
            Console.WriteLine(textao);

            // Humanizer: humanizando datas
            Console.WriteLine("--- Humanizer: humanizando datas");
            DateTime ataqueTorresGemeas = new DateTime(2001, 09, 11, 8, 46, 00);
            DateTime ataqueTorresGemeas50anos = ataqueTorresGemeas.AddYears(50);
            string textoAtaqueTorresGemeas = ataqueTorresGemeas.Humanize();
            string textoAtaqueTorresGemeas50Anos = ataqueTorresGemeas50anos.Humanize();
            Console.WriteLine($"Ataque às torres gêmeas: {textoAtaqueTorresGemeas}");
            Console.WriteLine($"50 anos do ataque às torres gêmeas: {textoAtaqueTorresGemeas50Anos}");

            // Humanizer: humanizando números
            Console.WriteLine("--- Humanizer: humanizando números");
            int numero = 321651321;
            int anoIndependenciaBrasil = 1822;
            string numeroPorExtenso = numero.ToWords();
            string anoIndependenciaRomano = anoIndependenciaBrasil.ToRoman();
            Console.WriteLine($"{numero} => {numeroPorExtenso}");
            Console.WriteLine($"Independência do Brasil ({anoIndependenciaBrasil}) => {anoIndependenciaRomano}");
        }
    }
}

Saída:

C:\Users\ermogenes\Documents\DevCs\AulaPacotes>dotnet run
--- Figgle: criando textos em ASCII art
  ____                ____  _  _   
 |  _ \  _____   __  / ___|| || |_
 | | | |/ _ \ \ / / | |  |_  ..  _|
 | |_| |  __/\ V /  | |__|_      _|
 |____/ \___| \_/    \____||_||_|


--- Humanizer: humanizando datas
Ataque às torres gêmeas: 18 anos atrás
50 anos do ataque às torres gêmeas: em 31 anos
--- Humanizer: humanizando números
321651321 => trezentos e vinte e um milhões seiscentos e cinquenta e um mil trezentos e vinte e um
Independência do Brasil (1822) => MDCCCXXII