Back-End

23 out, 2017

Novidades do C# 7: Out variables

Publicidade

Estou retomando o C# 7, e nesse momento os novos compiladores já saíram, assim como o Visual Studio 2017. Então, a partir de agora, vou linkar direto para os docs das funcionalidades, em vez do Github.

Out variables

A ideia é que você possa, em uma única linha, declarar a variável e já lhe atribuir um valor, ao chamar um método que possui uma variável out.

Isso é muito utilizado em métodos do tipo Try. Até o C# 6, você tinha que fazer assim:

int result;
if (int.TryParse("1", out result))
    WriteLine(result);

E agora com C# 7 você pode declarar a variável na mesma linha do TryParse:

if (int.TryParse("1", out int result))
    WriteLine(result);

E pode também usar a poderosa inferência de tipos do C# e evitar escrever o tipo, no caso int, aqui. Nesse caso, não há uma grande vantagem ao mudar de int pra var, mas a variável de saída poderia ser um tipo mais complexo e chato de digitar, como um IEnumerable<Person<int>>, por exemplo. Veja com fica com a inferência do tipo:

if (int.TryParse("1", out var result2))
    WriteLine(result2);

Escopo

Note que chamei a variável de result2 em vez de result. Isso porque o escopo da variável declarada é o mesmo da expressão em que ela está inserida, ou seja, ela “vaza” para o escopo do if, e, já tendo sido declarada uma variável result antes, a seguinte deve ter outro nome. Inicialmente o escopo seria restrito ao if, mas isso foi alterado ao longo do caminho.

Variáveis de saída são especialmente interessantes quando falamos de expression bodied members (que temos desde o C# 6). Veja como fica bonito um método que combina out variables com um operador ternário, em uma construção impossível na versão anterior:

public int? GetValue() => int.TryParse(this.value, out var result) ? (int?)result : null;

É isso. Bem simples, mas bastante útil, deixando nosso código bem mais simples e bonito de ler. Já está disponível, então divirta-se!

Você pode ler sobre out variables na seção de novidades do C# 7 no Microsoft Docs.

***

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