Estou retomando a série de 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:
1
2
3
| 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
:
1
2
| 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:
1
2
| 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:
1
| 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ê consegue ler sobre out variables na seção de novidades do C# 7 no Microsoft Docs.
Nenhum comentário:
Postar um comentário