0Pricing
C# Academy · Aula

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 here

Funciona 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

  1. Tipos de valores anuláveis
  2. Operador condicional de nulo
  3. Operadores de coalescência de nulo
  4. Protegendo contra nulos
← Voltar para C# Academy