errdefer para limpeza após falhas
Desfaça o trabalho somente quando algo falhar.
errdefer para limpeza após falhas é 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.
Limpeza somente em caso de falha
Às vezes, você precisa desfazer o trabalho quando uma operação falha, mas mantê-lo quando ela é bem-sucedida. Esse é exatamente o caso de uso de errdefer.
Conheça errdefer
Um errdefer agenda código para ser executado quando o escopo termina, mas somente quando a função retorna um erro a partir daquele ponto.
errdefer allocator.free(buffer);defer sempre, errdefer em caso de erro
Um defer é executado independentemente de como o escopo termina. Um errdefer é executado somente no caminho de erro, portanto o sucesso o ignora completamente.
Libere um resultado parcialmente construído
Alocque e depois use errdefer para liberar. Se uma etapa posterior falhar, o buffer será liberado; se todas as etapas forem concluídas, você o manterá e retornará.
const buf = try allocator.alloc(u8, n);
errdefer allocator.free(buf);
try fill(buf);A ordem espelha a alocação
Coloque cada errdefer logo após a aquisição correspondente. Em caso de falha, eles são executados na ordem inversa, desfazendo os recursos com segurança.
const a = try open();
errdefer a.close();
const b = try open();
errdefer b.close();O sucesso mantém seu trabalho
Quando a função retorna um valor em vez de um erro, todos os errdefer são ignorados. O chamador recebe o resultado completamente construído.
return buf;O ponto de acionamento é importante
Um errdefer só protege contra erros que acontecem depois de ser registrado. Erros anteriores àquela linha não podem executá-lo, portanto coloque-o cedo.
Capture o erro
Você pode capturar o erro em um errdefer para inspecioná-lo durante a limpeza, por exemplo, para registrar qual falha acionou a reversão.
errdefer |e| std.debug.print("failed: {}\n", .{e});Construtores sem vazamentos
Funções que alocam e depois podem falhar usam errdefer para não deixar vazamentos. O trabalho parcial é desfeito automaticamente em qualquer erro.
Combine com try
Cada try pode sair antecipadamente em caso de erro. Com um errdefer registrado, essa saída antecipada ainda aciona sua limpeza antes de desfazer o escopo.
const x = try step();
errdefer rollback(x);
_ = try next(x);A ferramenta certa para reverter
Use errdefer quando a limpeza só deve acontecer se algo der errado. Ele transforma o gerenciamento de recursos no caminho de erro em uma única linha clara.
Verificação rápida
Você aloca um buffer e uma etapa posterior pode falhar. Você quer liberá-lo somente em caso de falha. O que deve usar?
Recapitulação
Você usou errdefer para desfazer o trabalho parcial no caminho de erro, colocou-o logo após cada aquisição e manteve intactos os resultados bem-sucedidos. ✅
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 “errdefer para limpeza após falhas” é grátis?
Sim — o texto completo de “errdefer para limpeza após falhas” é 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 “errdefer para limpeza após falhas”?
Desfaça o trabalho somente quando algo falhar. 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 “errdefer para limpeza após falhas”?
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
- Recuperando-se com catch
- Selecionando erros específicos
- errdefer para limpeza após falhas
- Encapsulando e relançando erros