Dart Academy · Урок

finally и гарантированная очистка

Выполнение кода независимо от возникновения исключения

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

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

Очистка должна выполняться всегда

Открытые файлы и соединения необходимо закрывать, даже если выполнение кода завершилось ошибкой. Для очистки, которая происходит всегда, Dart предоставляет finally. 🧹

Блок finally

Блок finally выполняется после try и catch при любых обстоятельствах. Успешно завершилось выполнение или произошёл сбой — его код выполняется всегда.

try {
  work();
} finally {
  cleanup();
}

Выполняется после успеха

Если блок попытки завершается без ошибки, Dart всё равно сразу после него выполняет блок завершения, прежде чем продолжить работу.

Выполняется после перехвата

Когда исключение перехвачено, выполняется блок перехвата, а затем также выполняется блок завершения. Оба блока срабатывают именно в таком порядке.

try {
  fail();
} catch (e) {
  log(e);
} finally {
  close();
}

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

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

try {
  risky();
} finally {
  release();
}

Почему не продублировать

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

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

Даже когда неперехваченное исключение продолжает распространяться вверх, блок завершения всё равно выполняется первым, поэтому ресурсы никогда не остаются незакрытыми.

Безопасное закрытие файла

Классический вариант использования: открыть ресурс в блоке попытки, воспользоваться им, а затем в любом случае вызвать close в блоке завершения, независимо от результата чтения.

try {
  file.read();
} finally {
  file.close();
}

Не возвращайте значение из блока завершения

Оператор возврата внутри блока завершения отменяет любой предыдущий возврат или исключение. Используйте блок завершения только для очистки, а не для управления потоком выполнения.

Порядок выполнения

Запомните последовательность: выполняется блок попытки, затем при необходимости блок перехвата, а последним — блок завершения. Очистка всегда завершает блок.

Полная конструкция попытки, перехвата и завершения

Здесь объединены все три элемента: защищённая работа, обработка ошибок и гарантированная очистка в блоке завершения в конце.

try {
  open();
} catch (e) {
  print(e);
} finally {
  close();
}

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

Когда выполняется блок завершения?

Итоги

Теперь Вы используете блок завершения для гарантированной очистки, которая выполняется при любом пути: успешном, с перехваченной ошибкой или с неперехваченным выбросом. Утечек нет. 🔒

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

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

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

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

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

Урок «finally и гарантированная очистка» бесплатный?

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

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

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

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

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

Сколько времени занимает урок «finally и гарантированная очистка»?

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

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

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

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

  1. throw, try и catch
  2. Конструкции on и типы исключений
  3. finally и гарантированная очистка
  4. Пользовательские исключения и rethrow
← Назад к Dart Academy