Back-End

14 fev, 2018

Novidades do C# 7.1: expressão literal default

Publicidade

Esse é o 12º artigo da série sobre C# 7, e o segundo sobre C# 7.1. Lembrando que para utilizar as versões minor do C# (como a 7.1, ou 7.2) você precisa habilitá-la nos atributos do projeto. Veja neste artigo como fazê-lo e também como habilitar na solution inteira pra não ter que ficar configurando cada projeto individualmente.

Novidades do C# 7.1: Expressão literal default

A partir da versão 7.1 ficou mais fácil declarar valores default. Antes, você tinha que especificar o tipo inteiro, e agora pode usar somente a palavra-chave default. Isso segue na ideia de que, se o compilador puder adivinhar algo, então é melhor que ele o faça. Você digita menos, o código fica mais limpo, e nada é perdido.

É importante salientar que essa nova sintaxe não muda absolutamente nada no código final produzido, que fica idêntico ao que era produzido antes. Ou seja, não há qualquer argumento a respeito de diferença de desempenho, ela simplesmente não existe.

Veja como ficava:

Func<string, bool> onde = default(Func<string, bool>);

E como ficou no C# 7.1:

Func<string, bool> onde = default;

Para isso, funcionar o compilador deve ser capaz de inferir o tipo, o que nem sempre é possível. Você não poderia usar var no exemplo acima. Se quisesse usar var, ainda teria que usar a forma antiga, por exemplo:

var onde = default(Func<string, bool>);

Os lugares onde você pode usar default, são:

  1. Inicializador de variáveis (como o exemplo acima);
  2. Passagem de valor para variáveis;
  3. Indicando o valor padrão para um paramêtro opcional;
  4. Passagem de argumentos;
  5. Retorno de funções.

No segundo caso (passagem de valor para variáveis):

Func<string, bool> onde;
onde = default;

No terceiro caso (indicando o valor padrão para um parâmetro opcional):

void Funcao(int i, Func<bool> f = default) { }

No quarto caso (passagem de argumentos ao invocar uma função):

Funcao(default);

No quinto caso (retorno de funções):

string F() => default;

Esse é o típico exemplo de funcionalidade pequena e simples que tem um impacto razoável, já que o código fica mais limpo e gastamos menos tempo no teclado. É sem dúvida alguma fruto da reescrita do compilador do C# em C#, que permite essas pequenas evoluções, que saem quase de graça.

Você consegue ler sobre a expressão literal de default nos docs sobre default.

***

Este artigo foi produzido em parceria com a Lambda3. Leia outros conteúdos no blog da empresa: blog.lambda3.com.br