Zig Academy · Урок

Гарантии defer

Запускайте код при завершении области видимости.

Урок 1 из 413 шагов

«Гарантии defer» — бесплатный урок Zig Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.

Надёжная очистка

Почти каждая программа что-то открывает, а затем должна это закрыть. Zig предоставляет defer, чтобы очистка никогда не была забыта.

Что делает defer

Инструкция defer планирует выполнение фрагмента кода при завершении окружающей области видимости независимо от способа выхода из неё.

defer cleanup();

Пишите очистку сразу

Главная идея: размещайте строку очистки рядом со строкой получения ресурса, чтобы их было невозможно разделить.

const file = try open();
defer file.close();

Выполняется при выходе из области видимости

Отложенный код выполняется не сразу. Он ждёт завершения области видимости, в которой находится, а затем запускается.

{
    defer cleanup();
    work();
}

Работает при любом выходе

Заканчивается ли область видимости обычным образом или Вы досрочно выполняете return из её середины, отложенный код всё равно запустится. Обойти это невозможно.

defer file.close();
if (bad) return error.Oops;

Ошибки его не пропускают

Даже если находящийся позже в функции try возвращает ошибку, Ваш defer уже запланирован и выполнится при выходе.

Любая инструкция, не только вызовы

defer может содержать любую отдельную инструкцию, включая блок, поэтому Вы можете объединить несколько шагов очистки.

defer {
    free(buf);
    log("done");
}

Области видимости за пределами функций

defer связан с окружающей его областью видимости, которой может быть тело цикла или блок if, а не только функция целиком.

while (more()) {
    defer step();
}

Без ручного отслеживания

Без defer Вам пришлось бы помнить о close в каждой ветви. С ним компилятор выполняет очистку, поэтому Вы не можете забыть ни об одном пути.

Читается сверху вниз

Поскольку получение ресурса и очистка находятся рядом, код читается как понятная история: open, использование, а close уже запланирован.

Главный инструмент безопасности ресурсов

Для файлов, выделений памяти и блокировок defer — это повседневный инструмент, который предотвращает утечки и поддерживает программы Zig в порядке.

Быстрая проверка

Когда фактически выполняется отложенная инструкция?

Итоги

Вы познакомились с defer: размещайте очистку рядом с получением ресурса, и Zig гарантирует её выполнение при выходе из области видимости на любом пути. 🧹

Можно начать бесплатно

Изучай Zig с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Гарантии defer» бесплатный?

Да — полный текст урока «Гарантии defer» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.

Чему я научусь в уроке «Гарантии defer»?

Запускайте код при завершении области видимости. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Zig Academy?

Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Гарантии defer»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Zig Academy?

Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Гарантии defer
  2. Порядок выполнения нескольких defer
  3. defer и errdefer на практике
  4. Сочетание открытия и закрытия
← Назад к Zig Academy