Novidades do C# 8.0: Nullable Reference Types

Renato Groffe
3 min readJan 27, 2019

--

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.

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet