Exercício – Investigar as noções básicas da formatação de cadeia de caracteres

Concluído

Nesta unidade, você aprenderá métodos de formatação de cadeias de caracteres para fazer exibições eficientes, especialmente em casos com diversas variáveis.

Preparar o ambiente de codificação

Este módulo inclui atividades práticas que orientam você durante o processo de criação e execução do código de demonstração. Incentivamos você a concluir essas atividades usando o Visual Studio Code como ambiente de desenvolvimento. O uso do Visual Studio Code para essas atividades introduz você ao trabalho de elaboração e execução de códigos em um ambiente de desenvolvedor que é usado por profissionais em todo o mundo.

Observação

Se você completou outros módulos do Microsoft Learn nesta série de C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Nesse caso, é possível ignorar a seção de etapas a seguir e excluir o código no arquivo Project.cs usado em um exercício anterior.

  1. Abra o Visual Studio Code. Você pode usar o menu Iniciar do Windows (ou recurso equivalente em outro sistema operacional) para abrir o Visual Studio Code.

  2. No Visual Studio Code, no menu Arquivo, selecione Abrir Pasta.

  3. Na caixa de diálogo Abrir Pasta, navegue até a pasta Área de Trabalho do Windows. Se você mantém os projetos de código em um local de pasta diferente, use esse local. Neste treinamento, o importante é ter um local que seja fácil de localizar e lembrar.

  4. Na caixa de diálogo Abrir Pasta, selecione Selecionar Pasta. Se aparecer uma caixa de diálogo de segurança perguntando se confia nos autores, selecione Sim.

  5. No Visual Studio Code, no menu Terminal, selecione Novo Terminal. Observe que o prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:

    C:\Users\someuser\Desktop>
    
  6. No prompt de comando Terminal, para criar o novo aplicativo de console na pasta especificada, digite dotnet new console -o ./CsharpProjects/TestProject e pressione Enter. Este comando da CLI do .NET usa um modelo de programa .NET para criar o novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do arquivo .csproj.

  7. No painel EXPLORER, expanda a pasta CsharpProjects. Você deve ver a pasta TestProject e dois arquivos: o arquivo de programa do C#, denominado Program.cs, e o arquivo de projeto do C#, denominado TestProject.csproj.

  8. No painel EXPLORER, para exibir o arquivo de código no painel Editor, selecione Program.cs.

  9. Exclua as linhas de código existentes. Você usará este projeto de console em C# para criar, compilar e executar exemplos de código durante este módulo.

  10. Feche o painel do terminal.

O que é a Formatação Composta?

A formatação composta usa espaços reservados numerados dentro de uma cadeia de caracteres. No runtime, tudo o que está dentro das chaves é resolvido para um valor que também é transmitido com base na posição.

Este exemplo de formatação composta usa um método interno Format() na palavra-chave do tipo de dados string. Atualize o código no Editor do Visual Studio Code da seguinte maneira:

string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);

Ao executar esse código, é possível ver a saída a seguir.

Hello World!

Há algumas coisas importantes a se observar sobre esse código.

  • Os tipos de dados e as variáveis de um determinado tipo de dados têm “métodos auxiliares” internos para facilitar determinadas tarefas.
  • A cadeia de caracteres literal "{0} {1}!" forma um modelo que tem suas partes substituídas no runtime.
  • O token {0} é substituído pelo primeiro argumento depois do modelo da cadeia de caracteres; em outras palavras, o valor da variável first.
  • O token {1} é substituído pelo segundo argumento depois do modelo da cadeia de caracteres; em outras palavras, o valor da variável second.

Observação

Você pode achar estranho começar com o número 0. Na verdade, isso é muito comum no desenvolvimento de software. Sempre que houver uma sequência de itens que podem ser identificados usando um número, a numeração normalmente começará em 0.

  1. Atualize seu código desta maneira:

    string first = "Hello";
    string second = "World";
    Console.WriteLine("{1} {0}!", first, second);
    Console.WriteLine("{0} {0} {0}!", first, second);
    
  2. Salve o arquivo de código e use o Visual Studio Code para executar o código. A seguinte saída deve ser exibida:

    World Hello!
    Hello Hello Hello!
    

Algumas observações sobre esses exemplos:

  • Para a primeira instrução Console.WriteLine(), observe que os tokens podem ser organizados em qualquer ordem. O código de exemplo tem {1} antes de {0}.
  • Para a segunda instrução Console.WriteLine(), observe que os tokens podem ser reutilizados com três instâncias de {0}. Além disso, o segundo argumento de variável, second, não é usado. No entanto, o código ainda é executado sem erros.

O que é interpolação de cadeia de caracteres?

A interpolação de cadeia de caracteres é uma técnica que simplifica a formatação composta.

Em vez de usar um token numerado e incluir o valor literal ou nome da variável em uma lista de argumentos em String.Format() ou Console.WriteLine(), você pode apenas usar o nome da variável dentro das chaves.

  1. Para que uma cadeia de caracteres seja interpolada, você deve prefixá-la com a diretiva $. Agora, crie os mesmos exemplos de antes usando a interpolação de cadeia de caracteres em vez da formatação composta. Atualize seu código desta maneira:

    string first = "Hello";
    string second = "World";
    Console.WriteLine($"{first} {second}!");
    Console.WriteLine($"{second} {first}!");
    Console.WriteLine($"{first} {first} {first}!");
    
  2. Salve o arquivo de código e use o Visual Studio Code para executar o código. Você deve ver o seguinte resultado:

    Hello World!
    World Hello!
    Hello Hello Hello!
    

Observação

Se você analisar exemplos de código em livros e online, provavelmente verá o uso da formatação composta e da interpolação de cadeia de caracteres. No entanto, geralmente é necessário escolher a interpolação de cadeia de caracteres.

Moeda de formatação

A formatação composta e a interpolação de cadeia de caracteres podem ser usadas para formatar valores para exibição considerando uma linguagem e cultura específicas. No exemplo a seguir, o especificador de formato de moeda :C é usado para apresentar as variáveis price e discount como moeda. Atualize seu código desta maneira:

decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");

Se você tiver executado esse código em um computador com o idioma de exibição do Windows definido para "Inglês (Estados Unidos)", confira a saída a seguir.

Price: $123.45 (Save $50.00)

Observe como a adição do :C aos tokens dentro das chaves formata o número como moeda, independentemente se você usa int ou decimal.

Observação

O que acontece quando seu país/região e idioma não são conhecidos? Se você executar o código anterior em um Editor do .NET "no navegador", como o TrydotNet, verá a seguinte saída: Price: ¤123.45 (Save ¤50.00). O símbolo ¤ é usado em vez do símbolo do dinheiro do seu país/região. Esse é um símbolo genérico usado para denotar a “moeda” independentemente do tipo de moeda. Você vê esse símbolo no Editor do .NET porque ele ignora seu local atual.

Como o país/região e o idioma do usuário afetam a formatação da cadeia de caracteres

E se você executar o código anterior em um computador na França com o idioma de exibição do Windows definido como francês? Nesse caso, você veria a seguinte saída.

Price: 123,45 € (Save 50,00 €)

O motivo da saída "€" anterior é que o recurso de formatação de moeda da cadeia de caracteres depende da configuração do computador local para cultura. Nesse contexto, o termo “cultura” refere-se ao país/região e ao idioma do usuário final. O código de cultura é uma cadeia de cinco caracteres usada por computadores para identificar a localização e o idioma do usuário final. O código de cultura garante que certas informações, como datas e moeda, possam ser apresentadas corretamente.

Por exemplo:

  • o código de cultura de um falante de inglês nos EUA é en-US.
  • o código de cultura de um falante de francês na França é fr-FR.
  • o código de cultura de um falante de francês no Canadá é fr-CA.

A cultura afeta o sistema de escrita, o calendário usado, a ordem de classificação das cadeias de caracteres e a formatação de datas e números (como a formatação de moeda).

Verificar se o código funciona corretamente em todos os computadores, independentemente do país/região ou do idioma do usuário final, é desafiador. Esse processo é conhecido como localização (ou globalização). A localização depende de muitos fatores não discutidos neste módulo, mas, simplesmente, a sintaxe de formatação de cadeia de caracteres pode usar um formato diferente, dependendo da cultura do usuário.

Formatar números

Ao trabalhar com dados numéricos, talvez deseje formatar o número para facilitar a leitura, incluindo vírgulas para delinear milhares, milhões, bilhões e assim por diante.

O especificador de formato numérico N torna os números mais legíveis. Atualize seu código desta maneira:

decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");

Se isso for exibido na cultura en-US, você verá a saída a seguir.

Measurement: 123,456.79 units

Por padrão, o especificador de formato numérico N exibe apenas dois dígitos após o ponto decimal.

Se desejar mostrar mais precisão, adicione um número após o especificador. O código a seguir exibirá quatro dígitos após o ponto decimal que usa o especificador N4. Atualize seu código desta maneira:

decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");

Se isso for exibido na cultura en-US, você verá a saída a seguir.

Measurement: 123,456.7891 units

Formatar percentuais

Use o especificador de formato P para formatar percentuais. Adicione um número posteriormente para controlar o número de valores exibidos após o ponto decimal. Atualize seu código desta maneira:

decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");

Se isso for exibido na cultura en-US, você verá a saída a seguir.

Tax rate: 36.79 %

Combinar abordagens de formatação

Variáveis de cadeia de caracteres podem armazenar as cadeias de caracteres criadas usando técnicas de formatação. No exemplo a seguir, decimais e resultados matemáticos decimais são formatados e armazenados na cadeia de caracteres yourDiscount usando a formatação composta.

Atualize o código da maneira a seguir.

decimal price = 67.55m;
decimal salePrice = 59.99m;

string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);

Console.WriteLine(yourDiscount);

Se isso for exibido na cultura en-US, você verá a saída a seguir.

You saved $7.56 off the regular $67.55 price. 

É possível combinar diversas cadeias de caracteres formatadas. Desenvolva o código anterior concatenando a porcentagem calculada por meio da interpolação de cadeias de caracteres, em vez de concatenar essas cadeias, inserindo yourDiscount += $"A discount of {(price - salePrice)/price:P2}!"; no código na linha anterior a Console.WriteLine().

Observação

Você não precisa usar String.Format() com essa abordagem de interpolação de cadeia de caracteres.

Atualize o código da maneira a seguir.

decimal price = 67.55m;
decimal salePrice = 59.99m;

string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);

yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);

Se esta unidade for exibida na cultura en-US, você verá a saída a seguir.

You saved $7.56 off the regular $67.55 price. A discount of 11.19%!

Recapitulação

Aqui estão as informações mais importantes desta unidade sobre a formatação da cadeia de caracteres:

  • Você pode usar a formatação composta ou a interpolação de cadeia de caracteres para formatar cadeias de caracteres.
  • Com a formatação composta, você usa um modelo de cadeia de caracteres que contém um ou mais tokens de substituição no formato {0}. Forneça também uma lista de argumentos correspondidos com os tokens de substituição baseados em sua ordem. A formatação composta funciona ao usar string.Format() ou Console.WriteLine().
  • Com a interpolação de cadeia de caracteres, você usa um modelo de cadeia de caracteres que contém os nomes de variável que você deseja substituir entre chaves. Use a diretiva $ antes do modelo de cadeia de caracteres para indicar que você deseja que a cadeia de caracteres seja interpolada.
  • Formate a moeda usando um especificador :C.
  • Formate os números usando um especificador :N. Controle a precisão (número de valores após o ponto decimal) usando um número após o :N, como {myNumber:N3}.
  • Formate as porcentagens usando o especificador de formato :P.
  • A formatação de moedas e números depende da cultura do usuário final, um código de cinco caracteres que inclui o país/região e o idioma do usuário (de acordo com as configurações do computador).

Verificar seus conhecimentos

1.

Qual é a saída de Console.WriteLine($"Tax rate: {tax:P1}");, em que tax é definido por decimal tax =.12051 m;?