IT-словарь › Программирование › defer

defer

Программирование Svenska → Обновлено: 2026-10-17

Возможность языка: отложить выполнение выражения до возврата из окружающей функции. Гарантирует очистку при любых ранних возвратах и паниках. Родом из Go (2009), есть также в Zig и Swift. Замена try-finally и RAII.

Классика Go: defer file.Close() сразу после file, _ := os.Open(...) — закрытие произойдёт всегда, даже при возврате с ошибкой посреди функции. Несколько defer выполняются в порядке LIFO (стек). Частая ловушка: defer file.Close() внутри цикла — закрытия копятся до выхода из функции, дескрипторы файлов утекают. Лечится внутренней функцией. Swift: defer { cleanup() } работает похоже. Zig: defer и errdefer (срабатывает только при возврате с ошибкой). Современный паттерн управления ресурсами — «try-finally из Java с синтаксическим сахаром».

← Назад к словарю