0Pricing
Zig Academy · Aula

Ponteiros opcionais e ?*T

Combine ponteiros com opcionalidade.

Ponteiros opcionais e ?*T é uma aula grátis de Zig 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 Zig Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Zig Academy inclui 4 aulas no total.

Ponteiros também podem ser opcionais

Normalmente, um ponteiro deve sempre apontar para um valor válido. Torne-o opcional e ele passará a ter uma forma legítima de representar que ainda não aponta para nada.

A forma ?*T

O tipo ?*T significa: um ponteiro opcional para um T. Ele aponta para um valor real ou contém null.

var node: ?*Node = null;

Um ponteiro nulo seguro

Esta é a resposta de Zig aos ponteiros nulos de C. O ponteiro pode estar ausente, mas o opcional obriga você a verificá-lo antes de desreferenciá-lo.

Desembrulhe antes de seguir

Você não pode desreferenciar um ?*T diretamente. Primeiro, desembrulhe-o com if ou orelse para obter o ponteiro simples que está dentro dele.

if (node) |p| {
    use(p.*);
}

A captura fornece um ponteiro real

Dentro da captura de if, o nome é um *Node simples, pronto para ser desreferenciado com .* como qualquer ponteiro não opcional.

if (head) |p| {
    const value = p.*;
}

Excelente para estruturas encadeadas

Ponteiros opcionais são ideais em listas encadeadas e árvores, nas quais um campo seguinte ou filho é null no fim da cadeia.

const Node = struct { next: ?*Node };

Null marca o fim

Ao percorrer uma lista, um campo seguinte com valor null indica claramente que você chegou ao último node e deve parar.

Zig armazena a marca separadamente

Para ponteiros, Zig armazena o estado null no próprio valor do ponteiro; assim, um ?*T não ocupa espaço adicional em relação a um ponteiro comum.

Ponteiros opcionais constantes

Você pode combinar somente leitura e opcionalidade: ?*const T é um ponteiro opcional por meio do qual você pode ler, mas nunca escrever.

var view: ?*const u8 = null;

Ainda sem falhas inesperadas

Como o tipo informa que o valor pode ser null, o compilador não permitirá que você esqueça a verificação, ao contrário de uma desreferenciação de ponteiro bruto em C.

Percorrendo uma cadeia

Um laço while que captura cada ponteiro seguinte opcional é a forma idiomática de percorrer uma lista até que null apareça.

while (cur) |n| {
    cur = n.next;
}

Verificação rápida

O que o tipo ?*Node descreve?

Recapitulação

Você aprendeu ?*T: um ponteiro opcional e seguro. Desembrulhe-o antes de desreferenciá-lo e deixe null marcar o fim das estruturas encadeadas. 🔗

Perguntas Frequentes

A aula “Ponteiros opcionais e ?*T” é grátis?

Sim — o texto completo de “Ponteiros opcionais e ?*T” é 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 Zig Academy, atualize para CoddyKit PRO. O curso de Zig Academy inclui 4 aulas no total.

O que vou aprender em “Ponteiros opcionais e ?*T”?

Combine ponteiros com opcionalidade. Você pratica Zig 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 Zig Academy?

Nenhuma experiência prévia é necessária. Zig 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 “Ponteiros opcionais e ?*T”?

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 Zig Academy?

Sim. Cada aula de Zig 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. Declarando tipos opcionais
  2. Desempacotando com segurança com if e orelse
  3. Ponteiros opcionais e ?*T
  4. null versus undefined
← Voltar para Zig Academy