Técnicas

C# 8 – Novidades – Parte 1

Esse é o primeiro post de uma série onde serão abordadas as novas funcionalidades da versão 8 do C#. 

Começaremos por uma funcionalidade chamada Nullable Reference Types, que permite ao desenvolvedor evitar os conhecidos NullReferenceExceptionEsse tipo de erro ocorre quando tentamos acessar um membro em um tipo cujo valor é null ou sem instanciar o objeto previamente. 

Esse problema pode aparecer por descuido ou inexperiência na linguagem, mas agora  podemos identificar esse problema durante a codificação e não mais na hora de testar ou pior, em alguns casos, em  produção.

Abaixo temos os principais métodos deste exemplo. O código completo pode ser baixado aqui.

public static string ExibirDadosAluno(Aluno aluno)
        {
            return 
$"Nome: {aluno.Nome} 
Sobrenome: {aluno.Sobrenome[0]}., 
Idade: {aluno.Idade}";
        }

public static IEnumerable<string> ListarAlunos(IList<Aluno> alunos)
        {
            foreach (var aluno in alunos)
            {
                yield return ExibirDadosAluno(aluno);
            }
        }

O método ListarAlunos itera sobre uma coleção e exibe os dados de cada um dos alunos no formato {Nome} {S.}, {Idade}. Ex.: Fernando F., 38.

Para exibir apenas a primeira letra do sobrenome, utilizamos a sintaxe aluno.Sobrenome[0]. Ao executar esse código, teremos o erro da figura abaixo, pois estamos tentando acessar um valor null.

Imagem 1 – NullReferenceException.

O contexo #nullable

Agora podemos dizer ao compilador que estamos trabalhando com tipos que podem ser null e deixar que ele nos alerte sobre potenciais problemas. Para isso vamos submeter nosso código a um contexto de tipos anuláveis. Para fazer isso, basta inserir #nullable enable no início do arquivo.

Imagem 2 – Definindo o contexto para tipos anuláveis.

Para fins didáticos, a classe Aluno – Imagem 3 – foi deixada no arquivo principal, portanto esta também faz parte do contexto, que verifica o arquivo completo em busca de inconsistências.

A parte legal começa agora, podemos notar que o construtor está sinalizado por um alerta, informando que há um membro não inicializado que este poderá causar problemas no futuro.

Imagem 3 – Alerta de membro não inicializado.

P.S. Por se tratar de um alerta, este também também aparece na janela de erros (Error List).

Vamos inicializar esta propriedade e ver como se comportará nosso código.

Imagem 4 – Associação inválida.

Nesse caso estamos associando um null para um tipo que não aceita este valor. Agora marcaremos a propriedade “Sobrenome” com o símbolo “?” para que esta possa receber null, conforme imagem abaixo:

Imagem 5 – Alterando a propriedade para aceitar null.

Note que após os devidos ajustes terem sido feitos, ainda temos um alerta para tratar no método ExibirDadosAluno.

Imagem 7 – Possível “desreferência” de null.

Esse alerta informa uma possível “desreferência” de null, ou seja, o compilador está nos avisando que em algum momento a referência desta propriedade pode se tornar null. Neste caso, basta que façamos um tratamento condicional no retorno do método.

Imagem 8 – Tratando o retorno no caso de null.

Assim podemos evitar aqueles bugs bobos e indesejados que podem nos trazer muita dor de cabeça, pois quando eles ocorrem, são nos piores momentos.

É possível também configurar a verificação de tipos nulos para todo o projeto, para isso é preciso adicionar a linha destacada no arquivo “.csproj”, conforme a imagem 9.

Imagem 9 – Adicionando a linha de configuração para o projeto inteiro.

O operador “!”

Este operador serve para dizer ao compilador que você tem certeza do que está fazendo. O que isso significa? Significa que quando você receber um alerta de uma possível “desreferência” – situação em que o retorno poderá ser null e sem um tratamento adequado – e você quiser inibir este alerta, basta colocar o operador “!” – sem aspas – imediatamente após a propriedade e/ou campo que retornará o valor.

Imagem 10 – Inibindo alertas.

Lembre-se que maiores poderes carregam consigo maiores responsabilidades!

Padrão

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s