Переключение по конкретным ошибкам
Создавайте ветвление в зависимости от возвращённой ошибки.
«Переключение по конкретным ошибкам» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Восстановление с помощью catch
- Переключение по конкретным ошибкам
- errdefer для очистки после сбоя
- Оборачивание и повторный выброс ошибок