Zig Academy · Leçon

errdefer pour nettoyer après un échec

Annulez le travail uniquement en cas d'échec.

Leçon 3 sur 413 étapes

errdefer pour nettoyer après un échec est une leçon Zig Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Zig Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Zig Academy comprend 4 leçons au total.

Nettoyage uniquement en cas d’échec

Vous devez parfois annuler le travail effectué lorsqu’une opération échoue, tout en le conservant lorsqu’elle réussit. C’est précisément le rôle de errdefer.

Découvrez errdefer

Un errdefer programme l’exécution d’un code à la sortie de la portée, mais uniquement lorsque la fonction renvoie une erreur à partir de ce point.

errdefer allocator.free(buffer);

defer toujours, errdefer en cas d’erreur

Un defer s’exécute quelle que soit la manière dont la portée se termine. Un errdefer ne s’exécute que sur le chemin d’erreur : le succès l’ignore entièrement.

Libérez un résultat partiellement construit

Allouez, puis utilisez errdefer pour programmer la libération. Si une étape ultérieure échoue, le tampon est libéré ; si toutes les étapes réussissent, vous le conservez et le renvoyez.

const buf = try allocator.alloc(u8, n);
errdefer allocator.free(buf);
try fill(buf);

L’ordre reflète l’allocation

Placez chaque errdefer juste après l’acquisition correspondante. En cas d’échec, ils s’exécutent dans l’ordre inverse et libèrent les ressources dans un ordre sûr.

const a = try open();
errdefer a.close();
const b = try open();
errdefer b.close();

Le succès conserve votre travail

Lorsque la fonction renvoie une valeur plutôt qu’une erreur, chaque errdefer est ignoré. L’appelant reçoit le résultat entièrement construit.

return buf;

Le point de déclenchement compte

Un errdefer ne protège que contre les erreurs qui surviennent après son enregistrement. Les erreurs antérieures à cette ligne ne peuvent pas l’exécuter : placez-le donc tôt.

Capturez l’erreur

Vous pouvez capturer l’erreur dans un errdefer pour l’examiner pendant le nettoyage, par exemple pour consigner l’échec qui a déclenché l’annulation.

errdefer |e| std.debug.print("failed: {}\n", .{e});

Construisez des fonctions de création sans fuite

Les fonctions qui allouent des ressources puis peuvent échouer utilisent errdefer pour éviter les fuites. Le travail partiel est automatiquement annulé en cas d’erreur.

Associez-le à try

Chaque try peut quitter prématurément la fonction en cas d’erreur. Lorsqu’un errdefer a été enregistré, cette sortie anticipée déclenche tout de même votre nettoyage avant le déroulement de la pile.

const x = try step();
errdefer rollback(x);
_ = try next(x);

L’outil adapté à l’annulation

Utilisez errdefer lorsque le nettoyage ne doit avoir lieu qu’en cas de problème. Il transforme la gestion des ressources sur le chemin d’erreur en une seule ligne claire.

Vérification rapide

Vous allouez un tampon, puis une étape ultérieure peut échouer. Vous voulez le libérer uniquement en cas d’échec. Qu’utilisez-vous ?

Récapitulatif

Vous avez utilisé errdefer pour annuler le travail partiel sur le chemin d’erreur, vous l’avez placé juste après chaque acquisition et vous avez préservé les résultats réussis. ✅

Gratuit pour commencer

Apprends Zig avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « errdefer pour nettoyer après un échec » est-elle gratuite ?

Oui — le texte complet de « errdefer pour nettoyer après un échec » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Zig Academy, passe à CoddyKit PRO. Le cours Zig Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « errdefer pour nettoyer après un échec » ?

Annulez le travail uniquement en cas d'échec. Tu pratiques Zig Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Zig Academy ?

Aucune expérience préalable n'est requise. Zig Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « errdefer pour nettoyer après un échec » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Zig Academy ?

Oui. Chaque leçon Zig Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Récupérer avec catch
  2. Sélectionner selon des erreurs précises
  3. errdefer pour nettoyer après un échec
  4. Envelopper et relancer des erreurs
← Retour à Zig Academy