Novidades do C# 7: Binary Literals e Digit Separators

Tempo de leitura:3 minuto(s)

Esse é o 3º post da série sobre C# 7. Pra acompanhar a série você pode seguir a tag C#7 no blog ou voltar no post que agrega a série.

Nesse post vou falar de binary literals, ou literais de binários, que nada mais são do que literais de inteiros que podem ser descritos como binários. E vou falar também de digit separators, que permitem separar números com “_”. Essas são mais duas funcionalidades que ajudam a deixar o código mais expressivo, e que são relacionadas, já que se referem a literais numéricos.

Ambas funcionalidades estão bem estáveis no momento, já no branch “future” do Roslyn, e é praticamente certo de que vão entrar no C# 7, o time já está finalizando os trabalhos, e praticamente não há bugs.

Você pode ler o issue no github que sugere binary literals no repositório do Roslyn, é o issue chamado “Proposal: Binary literals”, e a funcionalidade é acompanhada por uma tag chamada “New Language Feature – Binary Literals” que agrega sugestões em volta da proposta principal. Já para digit separators há o issue “Proposal: Digit separators”, que está agregada na mesma tag.

Binary Literals

Literais de binário te permitem escrever um inteiro informando os binários que compõe esse inteiro (0 e 1). Basta iniciar o inteiro com “0b” ou “0B”, e ele é considerado um literal binário. Assim, isso, temos:

  • 0b0 é zero;
  • 0b1 é um;
  • 0b10 são dois;
  • 0b11 são três;
  • 0b100 são quatro…

E por aí vai.

O inteiro também poderá ser seguido de uma letra que informa se é um inteiro sem sinal (u ou U), um long (l ou L), ou ambos em qualquer casing ou ordem (por exemplo, UL), nesse caso um longo sem sinal. Assim, o número um com tipo long sem sinal binário seria “0b1UL”.

Usa-se um literal binário em qualquer lugar em que um literal decimal seria usado, ou seja, para inicializar uma variável, como argumento a uma função, etc.

Qualquer semelhança com números hexa não são mera conhecidência, com a única diferença que os hexa começam com “0x” e são chatos pra contar.

Digit Separators

Os separadores de digitos permitem usar o underscore (a.k.a. underline, ou “_”) para separar qualquer número (não somente literais binários). São especialmente interessantes em números que quando escritos ficam extensos, por isso aparecem junto da feature de binary literals, já que números binários podem ficar bem grandes (em quantidade de caracteres).

Assim, todos esses números são o número mil e vinte e quatro:

  • 1_024
  • 0b10_000_000_000
  • 0b100_0000_0000
  • 0x4_00

O underscore somente não poderá aparecer na frente de um ponto (10_.0), de um caractere exponencial (1.1e_1), do caractere de especificação de tipo (10_L), seguindo os caracteres de binário (0b_1) ou de hexa (0x_1). Mas em outras posições é ok, por exemplo, antes do ponto (10_0.0) ou depois (10.0_1), sem encostar no ponto.

Resumindo

Duas pequenas features, ambas bem vindas.

Curtiram? Comentem nos comentários.

E temos tido boas conversas no Brasil.NET, vem conversar com a gente na sala de C# lá (se ainda não entrou, ou link pra entrar é esse: http://brasildotnet.azurewebsites.net/).

Autor: Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador.
Programa porque gosta, e começou a trabalhar com isso porque acha que trabalhar como administrador é meio chato. Por esse motivo sempre diz que nunca mais vai virar gerente de ninguém. E também porque acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é melhor que hierarquia. Mas isso é outro assunto.
Foi reconhecido  Microsoft MVP depois que alguém notou que ele não dormia a noite pra ficar escrevendo artigos, cuidando e participando do .Net Architects, gravando o podcast Tecnoretórica, escrevendo posts no blog e falando o que bem entende no twitter @giovannibassi. E por falar nisso é no twitter que conta pra todos que gerencia de projetos deve ser feita pelo time e não por um gerentes, que greves em TI são coisas sem sentido e que stored procedure com regras de negócio são malígnas.
Você já deve ter percebido (até porque está lá na primeira frase) que Giovanni é agilista. De tanto gostar disso ele trouxe os programas de certificação e treinamento  PSD e PSM da Scrum.org pro Brasil, e por causa deles, do MVP e de algum trabalho que aparece tem que ficar indo pros EUA de vez enquando, coisa que prefere não fazer. (É bem comum você ouvir ele perguntando porque a Scrum.org e a Microsoft não estão na Itália, por exemplo.)
Junto com alguns Jedis criou a Lambda3, que, apesar de ser pequena e de não ser muito comum no Brasil, insiste em fazer projetos e consultoria direito. Por causa da Lambda3 ele tem trabalhado mais do que quando era consultor independente, mas menos do que a maioria das pessoas. Quer dizer, isso se você considerar que os trabalhos junto à comunidade não são trabalho, caso contrário ele trabalha mais que a maioria das pessoas.
Recentemente ele resolveu que merecia viver melhor e ganhar uns anos de vida e desistiu de ser sedentário, fazendo algum barulho de vez em quando com os amigos no twitter com a hashtag #DotNetEmForma. Por causa do convite recente de amigos do lado Open Source (que ele respeita e admira), começou a escalar, e agora está sempre com as mãos machucadas. Mas ainda dá pra programar. Você encontra ele sempre em algum evento, como o TechEd, e o DNAD, mas também outros menos comuns para o pessoal do .NET, como a RubyConf. Nesses eventos, ou ele está vendo palestras, ou batendo papo com alguém, ou codando alguma aplicação que alguém achou que dava pra fazer durante o evento.

  • Renan Aragão

    Desculpe minha ignorância, mas em que pode me ser útil essas features?