Zig Academy · Aula

errdefer para limpeza após falhas

Desfaça o trabalho somente quando algo falhar.

Aula 3 de 413 etapas

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. ✅

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 “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

  1. Recuperando-se com catch
  2. Selecionando erros específicos
  3. errdefer para limpeza após falhas
  4. Encapsulando e relançando erros
← Voltar para Zig Academy