Zig Academy · Aula

defer versus errdefer na prática

Escolha entre executar sempre e executar em caso de erro.

Aula 3 de 413 etapas

defer versus errdefer na prática é 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.

Duas palavras-chave de limpeza

Zig oferece duas ferramentas de agendamento: adiar sempre é executado, enquanto adiar em caso de erro só é executado quando o escopo termina com um erro.

Adiar significa sempre

Use adiar quando a limpeza precisar acontecer independentemente do resultado, como ao fechar um arquivo aberto durante toda a função.

const f = try open();
defer f.close();

Adiar em caso de erro significa falha

Um adiamento em caso de erro só é executado se o escopo terminar por causa de um erro. Em um retorno bem-sucedido, ele é silenciosamente ignorado.

const buf = try alloc();
errdefer free(buf);

Por que ignorar em caso de sucesso

Às vezes você cria um valor para retorná-lo. Em caso de sucesso, o chamador passa a ser seu proprietário, portanto você não deve liberá-lo; o adiamento em caso de erro respeita isso.

Objetos construídos pela metade

O adiamento em caso de erro é excelente em construtores. Se uma etapa posterior falhar, ele desfaz as alocações anteriores para que você nunca deixe um objeto parcialmente construído vazar.

const a = try alloc();
errdefer free(a);
const b = try alloc();

O sucesso transfere a propriedade

Quando todas as etapas são bem-sucedidas, a função retorna o valor e os adiamentos em caso de erro não são executados. A propriedade é transferida corretamente ao chamador.

return MyType{ .a = a, .b = b };

Eles combinam bem

Você pode combinar os dois. Um adiamento cuida da memória temporária de trabalho, enquanto um adiamento em caso de erro protege o resultado que você planeja retornar.

Ambos respeitam a ordem inversa

Assim como os adiamentos, vários adiamentos em caso de erro são desmontados na ordem inversa. Em caso de erro, Zig executa juntos os adiamentos correspondentes, começando pelo mais recente.

A posição importa

Coloque cada adiamento em caso de erro logo depois da etapa que ele protege. Ele só protege falhas que acontecem depois que sua própria linha é alcançada.

Uma regra simples

Faça uma pergunta: esta limpeza também deve ser executada em caso de sucesso? Sim significa adiar; somente em caso de erro significa adiar em caso de erro.

Sem vazamentos por construção

Juntas, essas palavras-chave permitem escrever funções sem vazamentos em todos os caminhos, de sucesso ou falha, sem controle manual.

Verificação rápida

Quando o adiamento em caso de erro é executado em comparação com o adiamento?

Recapitulação

Use adiar quando a limpeza sempre precisar ser executada, e adiar em caso de erro quando ela só deverá desfazer o trabalho no caminho de erro. ✅

Grátis para começar

Aprenda Zig com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “defer versus errdefer na prática” é grátis?

Sim — o texto completo de “defer versus errdefer na prática” é 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 “defer versus errdefer na prática”?

Escolha entre executar sempre e executar em caso de erro. 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 “defer versus errdefer na prática”?

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. O que defer garante
  2. Ordem de execução de vários defers
  3. defer versus errdefer na prática
  4. Combinando abertura e fechamento
← Voltar para Zig Academy