errdefer för städning vid fel
Ångra arbete endast när något misslyckas
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. ✅
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
- Återhämta med catch
- Växla utifrån specifika fel
- errdefer för städning vid fel
- Omsluta och kasta om fel