Em C#, o tratamento de valores nulos é uma prática essencial para evitar erros no código, especialmente as temidas “NullReferenceException”. Para ajudar os desenvolvedores a escreverem um código mais limpo e menos propenso a erros, o C# introduziu os operadores de coalescência nula: “??” e “??=”.
O problema dos valores nulos
Antes de mergulharmos nos operadores, vamos entender o problema que eles resolvem. Em C#, referências nulas são permitidas e, muitas vezes, inevitáveis. Por exemplo, ao buscar dados de uma base de dados, é possível que alguns campos retornem como null.
Se tentarmos acessar uma propriedade ou método de um objeto “null”, ocorrerá uma exceção de referência nula:
string nome = null;
Console.WriteLine(nome.Length);
No exemplo acima, como “nome” é null, tentar acessar a propriedade “Length” resulta em uma exceção. Para evitar isso, os desenvolvedores frequentemente escrevem código adicional para verificar a nulidade antes de acessar membros ou métodos:
if (nome != null)
{
Console.WriteLine(nome.Length);
}
else
{
Console.WriteLine("Nome está nulo.");
}
Embora este código evite a exceção, ele pode rapidamente se tornar repetitivo.
Operadores de coalescência nula
Para simplificar o tratamento de valores nulos, o C# oferece dois operadores de coalescência nula: o operador “??” e o operador de atribuição de coalescência nula “??=”.
Operador de Coalescência Nula (??)
O operador “??” é usado para retornar o operando à esquerda se ele não for null; caso contrário, retorna o operando à direita. Ele é particularmente útil para fornecer valores padrão para variáveis que podem ser nulas.
Estrutura:
var resultado = valorPossivelmenteNulo ?? valorPadrao;
Se “valorPossivelmenteNulo” for “null”, a variável “resultado” receberá “valorPadrao”. Caso contrário, “resultado” será igual a “valorPossivelmenteNulo”. Agora vamos ver um exemplo real:
string nome = null;
Console.WriteLine(nome ?? "Nome não informado");
No exemplo acima, como “nome” é “null”, será impresso o valor “Nome não informado”.
Operador de Atribuição de Coalescência Nula (??=)
O operador “??=” é uma forma abreviada de atribuição condicional que só atribui um valor a uma variável se ela for null. Este operador é equivalente a:
if (valorPossivelmenteNulo == null)
{
valorPossivelmenteNulo = valorPadrao;
}
Vamos ver como implementá-lo:
string nome = null;
nome ??= "Nome padrão";
Console.WriteLine(nome);
Aqui, como “nome” é inicialmente “nul”, o operador “??=” atribui “Nome padrão” à variavel “nome”.
Comparação com outras técnicas
Antes do C# 8.0, o tratamento de valores nulos exigia verificações explícitas com “if” como citado anteriormente ou o uso de operadores ternários:
var resultado = valorPossivelmenteNulo != null ? valorPossivelmenteNulo : valorPadrao;
Com os operadores de coalescência nula, o código é mais direto e menos propenso a erros.
Acelere a sua carreira conosco!
Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aqui
Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui
Conclusão
Os operadores de coalescência nula (?? e ??=) são ferramentas muito úteis no C# para lidar com valores nulos de maneira eficiente e elegante. Eles ajudam a reduzir a complexidade do código e a evitar exceções comuns, tornando o código mais robusto e fácil de manter. Aproveite esses operadores para escrever código mais limpo, legível e seguro contra erros de nulidade!