Novidades do C# 7 — Binary Literals e Digit Separators

NetCoders
netcoders
Published in
4 min readMay 15, 2016
csharp7-binary-digit-00

Embora ainda se encontre em fase de implementação e apresente funcionalidades passando pela fase de especificação/prototipação, algumas das novidades do C# 7 já estão disponíveis para testes no Visual Studio “15”.

Num post anterior iniciei uma série sobre as novidades da linguagem, abordando em detalhes o uso do recurso chamado Pattern Matching. Neste novo artigo serão descritas duas novas funcionalidades que integram o C# 7: Binary Literals e Digit Separators.

Para os exemplos descritos neste artigo foram utilizados projetos do tipo “Console Application” no Preview 2 do Visual Studio “15”, com os mesmos se baseando na versão 4.6.1 do .NET Framework.

Configurando o uso do C# 7 no Visual Studio “15”

O download desta versão do Visual Studio pode ser realizado através do seguinte link:

https://www.visualstudio.com/en-us/news/releasenotes/vs15/vs15-relnotes

Nas duas aplicações de exemplo foi necessário configurar o uso do C# 7. Tal ajuste deve ser feito a partir da seção “Build”, dentro das propriedades de cada projeto. No campo “Conditional compilation symbols” (Imagem 1) será preciso incluir então o valor __DEMO__.

csharp7-binary-digit-01

Imagem 1. Configurando um projeto para uso do C# 7

Versões anteriores do C# possibilitavam a declaração de valores numéricos no formato hexadecimal (recurso conhecido como “Hexadecimal Literals”), com tais representação sendo precedidas por “0x” ou “0X” como demonstrado na Listagem 1:

[code language=”csharp”]

private const int LETRA_Y_HEX = 0x59; // 59 (hexadecimal) = 79 (decimal)
private const int LETRA_Z_HEX = 0X5A; // 5A (hexadecimal) = 80 (decimal)


[/code]

Listagem 1: Hexadecimal Literals

O C# 7 traz também a possibilidade de se declarar valores no padrão binário, recurso este chamado “Binary Literals”. Na Listagem 2 encontra-se um exemplo de uso desta opção, com os valores binários sendo antecedidos por “0b” ou “0B”:

[code language=”csharp” highlight=”7,8"]
using System;

namespace TesteBinaryLiterals
{
class Program
{
private const int LETRA_Y_BIN = 0b01011001; // 01011001 (binário) = 89 (decimal)
private const int LETRA_Z_BIN = 0B01011010; // 01011010 (binário) = 90 (decimal)

static void Main(string[] args)
{
Console.WriteLine(“Valor numérico de alguns caracteres ASCII”);
Console.WriteLine($”Y = {LETRA_Y_BIN}”);
Console.WriteLine($”Z = {LETRA_Z_BIN}”);
Console.ReadKey();
}
}
}
[/code]

Listagem 2: Binary Literals

O resultado da execução deste trecho de código pode ser observado na Imagem 2:

csharp7-binary-digit-02

Digit Separators

Ao representar números extensos é comum que se utilizem separadores, de forma a tornar mais legível a visualização dos mesmos. O recurso do C# 7 chamado “Digit Separator” tem essa função, fazendo uso para isto do caracter “_” (underline) na separação de sequências de algarismos.

Na Listagem 3 é possível observar o uso deste tipo de separador com valores binários, hexadecimais, inteiros e dotados de casas decimais:

[code language=”csharp” highlight=”7,8,9,10"]
using System;

namespace TesteDigitSeparators
{
class Program
{
private const int LETRA_Y_BIN = 0b01_01_10_01; // 01011001 (binário) = 89 (decimal)
private const int LETRA_Z_HEX = 0X5A; // 5A (hexadecimal) = 80 (decimal)
private const int POPULACAO_ESTIMADA_BRASIL = 204_500_000;
private const double RENDA_PER_CAPITA_BRASIL_USD = 11_208.08;

static void Main(string[] args)
{
Console.WriteLine(“Valor numérico de alguns caracteres ASCII”);
Console.WriteLine($”Y = {LETRA_Y_BIN}”);
Console.WriteLine($”Z = {LETRA_Z_HEX}”);
Console.WriteLine(String.Empty);
Console.WriteLine($”População estimada do Brasil = {POPULACAO_ESTIMADA_BRASIL}”);
Console.WriteLine($”Renda per capita do Brasil (US$) = {RENDA_PER_CAPITA_BRASIL_USD}”);
Console.ReadKey();
}
}
}
[/code]

Listagem 3: Utilizando Digit Separators

Ao executar este conjunto de instruções será exibido um resultado similar ao da Imagem 3:

csharp7-binary-digit-03

Imagem 3. Exemplo de utilização de Digit Separators

Conclusão

Recursos como Digit Separators e Binary Literals foram projetados com o intuito de simplificar a manipulação de valores numéricos, conforme demonstrado nos exemplos abordados por este artigo. Outras funcionalidades que integram o C# 7 serão abordadas em futuros posts desta série.

Espero que este conteúdo possa ter sido útil.

Até uma próxima oportunidade!

Referências

The Future of C# — Build 2016
https://channel9.msdn.com/Events/Build/2016/B889

--

--