Zig Academy · Lektion

errdefer för städning vid fel

Ångra arbete endast när något misslyckas

Lektion 3 av 413 steg

errdefer för städning vid fel är en gratis lektion i Zig Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Zig Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Zig Academy innehåller totalt 4 lektioner.

Rensa bara vid fel

Ibland måste ni ångra arbete när en operation misslyckas, men behålla det när den lyckas. Det är precis vad errdefer används till.

Möt errdefer

En errdefer schemalägger kod som ska köras när omfånget lämnas, men endast när funktionen returnerar ett fel som inträffar efter den punkten.

errdefer allocator.free(buffer);

defer alltid, errdefer vid fel

En defer körs oavsett hur omfånget avslutas. En errdefer körs endast på felvägen, så vid framgång hoppas den över helt.

Frigör ett delvis byggt resultat

Allokera och använd sedan errdefer för att frigöra minnet. Om ett senare steg misslyckas frigörs bufferten; om alla steg lyckas behåller och returnerar ni den.

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

Ordningen speglar allokeringen

Placera varje errdefer direkt efter motsvarande resursförvärv. Vid fel körs de i omvänd ordning, så att resurserna avvecklas på ett säkert sätt.

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

Framgång bevarar ert arbete

När funktionen returnerar ett värde i stället för ett fel hoppas varje errdefer över. Anroparen får det fullständigt byggda resultatet.

return buf;

Utlösningspunkten spelar roll

En errdefer skyddar endast mot fel som inträffar efter att den registrerats. Fel före den raden kan inte utlösa den, så placera den tidigt.

Fånga felet

Ni kan fånga felet i en errdefer för att undersöka det under rensningen, till exempel för att logga vilket fel som utlöste återställningen.

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

Bygg läckagefria konstruktorer

Funktioner som allokerar och sedan kan misslyckas använder errdefer för att undvika läckor. Delvis utfört arbete ångras automatiskt vid alla fel.

Kombinera med try

Varje try kan lämna funktionen tidigt vid ett fel. Om en errdefer har registrerats utlöser även denna tidiga utgång rensningen innan omfånget avvecklas.

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

Rätt verktyg för återställning

Använd errdefer när rensning endast ska ske om något går fel. Då samlas resurshanteringen på felvägen på en enda tydlig rad.

Snabb kontroll

Ni allokerar en buffert och ett senare steg kan misslyckas. Ni vill att den endast frigörs vid fel. Vad använder ni?

Sammanfattning

Ni använde errdefer för att ångra delvis utfört arbete på felvägen, placerade den direkt efter varje resursförvärv och bevarade lyckade resultat. ✅

Gratis att börja

Lär dig Zig med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”errdefer för städning vid fel” gratis?

Ja – hela texten till ”errdefer för städning vid fel” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Zig Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Zig Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”errdefer för städning vid fel”?

Ångra arbete endast när något misslyckas Ni övar på Zig Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Zig Academy?

Du behöver inga förkunskaper. Utbildningen i Zig Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”errdefer för städning vid fel”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Zig Academy-lektionen?

Ja. Varje Zig Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Återhämta med catch
  2. Växla utifrån specifika fel
  3. errdefer för städning vid fel
  4. Omsluta och kasta om fel
← Tillbaka till Zig Academy