BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Preview of C# 8.x

Preview of C# 8.x

Mesmo que o C# 8.0 esteja a meses de seu lançamento, o planejamento já começou para a versão 8.x do C#. Alguns recursos são novos, outros foram já foram considerados na versão 8 do C#, e como sempre, a lista está sujeita a alterações.

Conforme discutido em um relatório anterior, o recurso Caller Expression Attribute permitiria que uma função capturasse a expressão usada para gerar os argumentos, sendo utilizada principalmente em declarações e testes automatizados.

A inferência de tipo para a nova palavra-chave, formalmente conhecida como Target-Typed new Expression, reduziria o código nas situações em que o nome do tipo pode ser determinado pelo contexto.

Embora a opinião atual seja de aproximadamente 3 a favor para 1 contra, a instrução Defer ainda está na lista de recursos que estão sendo considerados para uma versão 8.x.

Aperfeiçoamento do tipo comum Nullable

Na verdade, são duas solicitações, #33 e #881, que eliminam a necessidade de adicionar conversões explícitas ao trabalhar com tipos de valor nullable e operadores ternários. Na proposta do Nullable-Enhanced Common Type, os seguintes cenários seriam permitidos:

int a;
int? x1 = condition ? a : null;

int? b;
double c;
double? x2 = condition ? b : c;

Essa melhoria também seria suportada ao inferir o tipo de uma matriz ou o tipo de retorno de uma expressão lambda.

Declaração de Expressões

Um recurso das linguagens baseadas em C é que as atribuições são expressões e não apenas declarações, o que permite atalhos como a = b = c = 0, mas também erros como if (a = false). Por esse motivo, muitos guias de estilo proíbem a modificação de uma variável em outra instrução.

O C# tem tomado outra direção, com a capacidade de definir variáveis em novos lugares, como parâmetros externos e como parte do pattern matching. Com expressões de declaração, é possível declarar variáveis em quase todos os lugares em que seja possível realizar uma atribuição.

Anteriormente seria possível escrever:

char ch;
while ((ch = GetNextChar()) == 'a' || ch == 'b' || ch == 'c')

seria possível abreviá-lo para:

while ((char ch = GetNextChar()) == 'a' || ch == 'b' || ch == 'c')

Aqui está outro exemplo do que é possível fazer:

var sum = (var p = GetPoint(); p.X + p.Y);

Um recurso relacionado é a capacidade de misturar declarações e variáveis na desconstrução. Primeiro proposto para o C# 7.1, esse recurso permitiria várias atribuições quando algumas, mas não todas, variáveis fossem definidas novamente.

(x, var y) = e;

Funções Locais Aprimoradas

Uma das limitações das funções locais é que os atributos não podem ser aplicados nelas (essa é apenas uma limitação do C#, já que no CLR é possível fazer isso). A razão pela qual podemos ter problemas na versão 8 do C# é que atributos como NotNullWhenTrue podem ser necessários para obter a semântica correta para verificações de objetos nulos.

Em outro exemplo, os atributos em funções locais podem ser usados para configurar o roteamento do ASP.NET de maneira mais conveniente.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT