defer ed errdefer nella pratica
Scegliere tra esecuzione sempre e solo in caso di errore
defer ed errdefer nella pratica è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Zig Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Zig Academy include 4 lezioni in totale.
Due parole chiave per la pulizia
Zig offre due strumenti di pianificazione: defer viene sempre eseguito, mentre errdefer viene eseguito solo quando lo scope termina con un errore.
defer significa sempre
Usi defer quando la pulizia deve avvenire in ogni caso, ad esempio per chiudere un file aperto per l'intera funzione.
const f = try open();
defer f.close();errdefer significa in caso di errore
Un errdefer viene eseguito solo se lo scope termina a causa di un errore. In caso di ritorno corretto, viene semplicemente ignorato.
const buf = try alloc();
errdefer free(buf);Perché saltarlo in caso di successo
A volte si costruisce un valore per restituirlo. In caso di successo, il chiamante ne diventa proprietario, quindi non bisogna liberarlo; errdefer rispetta questa regola.
Oggetti costruiti a metà
errdefer è particolarmente utile nei costruttori. Se un passaggio successivo fallisce, annulla le allocazioni precedenti, evitando perdite di un oggetto costruito solo in parte.
const a = try alloc();
errdefer free(a);
const b = try alloc();Il successo trasferisce la proprietà
Quando ogni passaggio riesce, la funzione restituisce il valore e gli errdefer non vengono eseguiti. La proprietà passa correttamente al chiamante.
return MyType{ .a = a, .b = b };Si combinano bene
Può combinarli entrambi. Un defer gestisce la memoria temporanea di lavoro, mentre un errdefer protegge il risultato che intende restituire.
Entrambi rispettano l'ordine inverso
Come defer, più errdefer vengono srotolati in ordine inverso. In caso di errore, Zig esegue insieme i defer e gli errdefer corrispondenti, dal più recente al più vecchio.
La posizione è importante
Inserisca ogni errdefer subito dopo il passaggio che protegge. Protegge solo dagli errori che si verificano dopo il raggiungimento della sua riga.
Una regola semplice
Si ponga una domanda: questa pulizia deve essere eseguita anche in caso di successo? Sì significa defer; solo in caso di errore significa errdefer.
Privi di perdite per costruzione
Insieme, queste parole chiave consentono di scrivere funzioni prive di perdite in ogni percorso, sia in caso di successo sia di errore, senza gestione manuale.
Verifica rapida
Quando viene eseguito errdefer rispetto a defer?
Riepilogo
Ricorra a defer quando la pulizia deve essere sempre eseguita, e a errdefer quando deve annullare il lavoro solo nel percorso di errore. ✅
Impara Zig con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «defer ed errdefer nella pratica» è gratuita?
Sì — il testo completo di «defer ed errdefer nella pratica» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Zig Academy, passa a CoddyKit PRO. Il corso Zig Academy include 4 lezioni in totale.
Cosa imparerò in «defer ed errdefer nella pratica»?
Scegliere tra esecuzione sempre e solo in caso di errore Eserciti Zig Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Zig Academy?
Non è richiesta alcuna esperienza precedente. Zig Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «defer ed errdefer nella pratica»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Zig Academy?
Sì. Ogni lezione Zig Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Che cosa garantisce defer
- Ordine di esecuzione di più defer
- defer ed errdefer nella pratica
- Associare open a close