0Pricing
Zig Academy · Урок

Переключение по конкретным ошибкам

Создавайте ветвление в зависимости от возвращённой ошибки.

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

Не все ошибки одинаковы

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

Сначала захват, затем switch

Захватите ошибку из catch, а затем передайте её в switch. Каждый вариант может по-своему отреагировать на конкретную ошибку.

open(path) catch |err| switch (err) {
    error.NotFound => create(path),
    else => return err,
};

Ошибки — это значения для switch

Такая ошибка, как error.NotFound, является обычным значением, поэтому switch сопоставляет её так же, как целое число или метку перечисления.

switch (err) {
    error.Timeout => retry(),
    error.Denied => reportDenied(),
}

switch должен охватывать все варианты

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

Охватите остальные варианты с помощью else

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

switch (err) {
    error.NotFound => createDefault(),
    else => return err,
}

Каждая ветвь возвращает значение

Поскольку switch является выражением, каждая ветвь может выдавать значение. Весь catch затем возвращает то, что выдаёт совпавшая ветвь.

const n = parse(s) catch |e| switch (e) {
    error.Empty => 0,
    else => -1,
};

Объединяйте ошибки запятыми

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

switch (err) {
    error.Timeout, error.Reset => retry(),
    else => return err,
}

Повторно выбрасывайте необрабатываемые ошибки

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

else => return err,

Сначала попробуйте использовать try

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

Ясность благодаря конкретике

Переключение по ошибкам точно документирует ожидаемые сбои. Читатель видит каждый вариант и реакцию вашего кода на него.

Компилятор вас подстрахует

Поскольку switch должен быть полным, добавление новой ошибки впоследствии заставит вас её обработать. Пропущенные варианты становятся ошибками сборки, а не ошибками программы.

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

Вы используете switch для захваченной ошибки, но перечисляете только некоторые варианты. Что требует Zig?

Итоги

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

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

Урок «Переключение по конкретным ошибкам» бесплатный?

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

Чему я научусь в уроке «Переключение по конкретным ошибкам»?

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

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

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

Сколько времени занимает урок «Переключение по конкретным ошибкам»?

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

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

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

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

  1. Восстановление с помощью catch
  2. Переключение по конкретным ошибкам
  3. errdefer для очистки после сбоя
  4. Оборачивание и повторный выброс ошибок
← Назад к Zig Academy