0Pricing
Zig Academy · Урок

Порядок выполнения нескольких defer

Узнайте, почему отложенный код выполняется в обратном порядке.

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

Несколько defer

В одной области видимости может находиться несколько инструкций defer. Когда область завершается, Zig должен определить порядок их выполнения.

Они выполняются в обратном порядке

Несколько defer запускаются в обратном порядке: последняя написанная инструкция выполняется первой, а первая — последней.

defer one();
defer two();

Последним вошёл — первым вышел

Это классическое поведение LIFO, как у стека. Каждый defer добавляется в стек, а при размотке они извлекаются в обратном порядке.

Небольшой пример

Здесь два defer выполняются после основной работы. Результат — two then one, потому что более поздний defer разматывается раньше более раннего.

defer print("one");
defer print("two");
work();

Почему обратный порядок имеет смысл

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

Зеркальное отражение получения ресурсов

Сначала выполните open для A, затем для B. Обратные defer выполнят close для B, затем для A, идеально отражая порядок подготовки.

a.open(); defer a.close();
b.open(); defer b.close();

Фиксируется в момент планирования

Каждый defer сохраняет свой код в порядке добавления, хотя выполнение откладывается. Порядок фиксируется в момент достижения каждой инструкции defer.

Пропускается, если до него не дошли

Если область видимости завершается до достижения строки defer, этот defer не был запланирован, поэтому он вообще не выполняется.

if (early) return;
defer late();

Отдельный стек для каждой области

Каждая область видимости хранит собственный стек defer. Внутренние области разматывают свои defer до того, как внешняя область размотает собственные.

Предсказуемое освобождение

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

Удобная мысленная модель

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

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

Есть два defer: сначала один, затем два. В каком порядке они выполнятся?

Итоги

Несколько defer разматываются в обратном порядке, как стек, поэтому самый новый ресурс освобождается первым, а очистка зеркально повторяет настройку. 🔁

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

Урок «Порядок выполнения нескольких defer» бесплатный?

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

Чему я научусь в уроке «Порядок выполнения нескольких defer»?

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

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

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

Сколько времени занимает урок «Порядок выполнения нескольких defer»?

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

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

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

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

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