Operadores de coalescência de nulo
Valores padrão de ?? e ??=.
Operadores de coalescência de nulo é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Fornecendo um valor alternativo
Muitas vezes, você quer usar um valor se ele existir ou um valor padrão se ele for null. O operador de coalescência nula ?? faz exatamente isso.
a ?? b significa: use a se ele não for nulo; caso contrário, use b.
string input = null;
string name = input ?? "Guest";
System.Console.WriteLine(name);Como ?? é avaliado
O lado esquerdo é avaliado primeiro. Se ele não for nulo, o lado direito nunca será avaliado.
Essa interrupção da avaliação faz com que um valor alternativo caro só seja calculado quando realmente necessário.
string cached = "data";
string value = cached ?? Compute();
System.Console.WriteLine(value);
// Compute() is never called hereFunciona com tipos de valor anuláveis
?? também desembrulha tipos de valor anuláveis. Combinar int? maybe com ?? 0 produz um int simples e não anulável.
Essa é uma maneira simples de converter int? em int usando um valor padrão.
int? maybe = null;
int sure = maybe ?? 0;
System.Console.WriteLine(sure);Um exemplo executável
Este programa lê uma configuração que pode ser nula e usa um valor padrão como alternativa. Execute-o para ver o valor alternativo em ação.
using System;
class Program
{
static void Main()
{
string theme = null;
string active = theme ?? "light";
Console.WriteLine("Theme: " + active);
}
}Encadeando ??
Você pode encadear vários valores alternativos. A expressão escolhe o primeiro valor não nulo, da esquerda para a direita.
a ?? b ?? c tenta a, depois b e, por fim, c como último recurso.
string a = null;
string b = null;
string c = "default";
System.Console.WriteLine(a ?? b ?? c);O operador ??=
A atribuição de coalescência nula ??= atribui o lado direito somente se o lado esquerdo for atualmente null.
x ??= y é uma forma abreviada de if (x == null) x = y; e deixa x inalterado quando ele já contém um valor.
string config = null;
config ??= "default";
System.Console.WriteLine(config);
config ??= "ignored";
System.Console.WriteLine(config);Inicialização sob demanda com ??=
Um uso comum de ??= é a inicialização sob demanda: criar um objeto somente na primeira vez em que ele for necessário.
Nas chamadas seguintes, o campo já estará definido, portanto ??= não fará nada.
System.Collections.Generic.List<int> items = null;
items ??= new System.Collections.Generic.List<int>();
items.Add(1);
System.Console.WriteLine(items.Count);Combinando ?. e ??
Combinar ?. com ?? é extremamente comum. ?. evita a exceção, e ?? fornece um valor quando a cadeia é nula.
user?.Name ?? "Unknown" lê o nome com segurança, usando "Unknown" como valor padrão.
string s = null;
int length = s?.Length ?? -1;
System.Console.WriteLine(length);?? em um programa completo
Aqui, ?. e ?? trabalham juntos para exibir um comprimento com segurança. Execute o programa com uma cadeia nula para ver o valor alternativo.
using System;
class Program
{
static void Main()
{
string username = null;
string display = username ?? "anonymous";
Console.WriteLine(display);
Console.WriteLine(username?.Length ?? 0);
}
}?? lançando uma exceção para nulo
O lado direito de ?? pode ser qualquer expressão, incluindo throw. Isso torna ?? uma forma compacta de falhar imediatamente diante de um nulo inesperado.
name ?? throw new ArgumentNullException(nameof(name)) retorna o nome ou lança uma exceção se ele for nulo.
string Validate(string name) =>
name ?? throw new System.ArgumentNullException(nameof(name));Comportamento associativo à direita
?? é associativo à direita, portanto a ?? b ?? c é agrupado como a ?? (b ?? c).
Na prática, isso ainda significa "o primeiro valor não nulo vence", mas é útil saber disso ao raciocinar sobre expressões complexas.
int? a = null;
int? b = null;
int result = a ?? b ?? 99;
System.Console.WriteLine(result);Verificação rápida
Teste sua compreensão dos operadores de coalescência nula.
Recapitulação
?? retorna o lado esquerdo quando ele não é nulo; caso contrário, retorna o lado direito, e pode ser encadeado. ??= atribui somente quando o destino é nulo, sendo ideal para inicialização sob demanda.
Combine-os com ?. para tratar valores nulos de forma segura e concisa, e use até mesmo ?? throw para falhar imediatamente.
Perguntas Frequentes
A aula “Operadores de coalescência de nulo” é grátis?
Sim — o texto completo de “Operadores de coalescência de nulo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Operadores de coalescência de nulo”?
Valores padrão de ?? e ??=. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Operadores de coalescência de nulo”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Tipos de valores anuláveis
- Operador condicional de nulo
- Operadores de coalescência de nulo
- Protegendo contra nulos