Lessico IT › Programmazione › defer

defer

Programmazione Svenska → Aggiornato: 2026-10-01

Costrutto che rinvia l'esecuzione di un'espressione fino al ritorno della funzione che la contiene, garantendo la pulizia anche con return anticipati o panic. Nato in Go (2009), esiste anche in Zig e Swift. Sostituisce try-finally e RAII.

Il classico di Go: defer file.Close() subito dopo file, _ := os.Open(...); la chiusura avverrà sempre, anche con un return per errore a metà funzione. Più defer vengono eseguiti in ordine LIFO (a pila). Trappola comune: defer file.Close() dentro un ciclo accumula le chiusure fino all'uscita dalla funzione, e gli handle dei file si perdono; si rimedia con una funzione interna.

In Swift: defer { cleanup() }, in modo analogo. In Zig: defer più errdefer, che gira solo in caso di return con errore. È il modello moderno di gestione delle risorse, da leggere come un «try-finally di Java con zucchero sintattico».

← Torna al lessico