Novidades do C# 8.0: Nullable Reference Types
O conceito de referência nula surgiu ainda na década de 1960, representando em muitos cenários um recurso bastante útil (sobretudo dentro da Programação Orientada a Objetos — POO). Contudo, problemas envolvendo a manipulação de referências nulas podem acontecer nas mais variadas plataformas de desenvolvimento de software. A quantidade de falhas deste tipo e o impacto causado pelas mesmas levou o responsável pela introdução desta técnica (o cientista da computação britânico Tony Hoare) a cunhar o termo Erro de 1 Bilhão de Dólares.
Situações inesperadas e indesejadas deste gênero também são frequentes em soluções implementadas em C#. Dentre as novidades trazidas pela versão 8.0 desta linguagem está um recurso que busca auxiliar os Desenvolvedores a evitar tais ocorrências: trata-se da funcionalidade batizada como Nullable Reference Types.
Supondo um exemplo de implementação como o indicado na listagem a seguir:
Obviamente que ao analisar esta implementação conseguimos determinar rapidamente que a execução do código resultará em uma exceção do tipo NullReferenceException. Na IDE, porém, nenhum alerta seria gerado (para este caso em específico foi utilizado o Preview 2 do Visual Studio 2019):
Um erro seria então gerado apenas em tempo de execução:
Ao habilitarmos o uso do C# 8.0 (beta) nas propriedades do projeto:
E ativando o uso de Nullable Reference Types no próprio arquivo Program.cs, através da inclusão da instrução #nullable enable:
Aparecerão agora 2 alertas/warnings relativos à atribuição de um valor nulo a uma variável (Converting null literal or possible null value to non-nullable type) e de um possível erro envolvendo a manipulação de uma referência nula (Possible dereference of a null reference):
Tudo isto pode ser resolvido através do uso de Nullable quando da atribuição do valor null à variável nomeCompleto (linha 11), assim como empregando o Null Conditional Operator ao acessar esta referência (linha 13):
Após esses ajustes os alertas não aparecerão mais:
E a aplicação executará sem erros:
Este foi o segundo post da série que estou produzindo sobre novidades do C# 8.0. Caso tenha interesse em consultar o primeiro artigo que publiquei acesse o link a seguir:
Novidades do C# 8.0: como habilitar, Ranges e Indices
Dia 31/01/2019 (quinta-feira) às 21h30 — horário de Brasília — teremos mais um evento online gratuito no Canal .NET. Desta vez eu (Renato Groffe) farei uma apresentação sobre como middlewares podem ser utilizados na extensão e customização de aplicações ASP.NET Core.
Ao longo do evento será abordado a customização de aplicações empregando middlewares que integram a própria plataforma, bem como a implementação customizada de estruturas deste tipo.
Além disso serão demonstrados novos recursos do ASP.NET Core 2.2 como Health Checks, também ativados via middleware.
Para efetuar a sua inscrição acesse a página do evento no Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.