defer versus errdefer na prática
Escolha entre executar sempre e executar em caso de erro.
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. ✅
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
- O que defer garante
- Ordem de execução de vários defers
- defer versus errdefer na prática
- Combinando abertura e fechamento