Zig Academy · Урок

Возврат ошибок из функций

Явно указывайте возможность сбоя в сигнатурах.

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

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

Сбой в сигнатуре

Если функция может завершиться с ошибкой, укажите это в её возвращаемом типе. Объединение с ошибкой, например ParseError!u32, заранее предупреждает каждого вызывающего кода.

fn parse(s: []const u8) ParseError!u32 {
    // ...
}

Верните успешное значение

В успешной ветке достаточно обычно вернуть полезную нагрузку. Zig сам оборачивает это обычное значение в успешную сторону объединения.

return 42;

Вместо этого верните ошибку

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

if (s.len == 0) return error.Empty;

Один возврат, два результата

Функция с объединением ошибок может вернуть значение в одной ветке и ошибку в другой. Оба варианта соответствуют объявленному типу.

if (ok) return value;
return error.Failed;

Пустое значение плюс ошибки

Функция, которая выполняет действие, но не возвращает значения, всё равно может завершиться с ошибкой. Используйте !void: при успехе она ничего не возвращает, а при сбое возвращает ошибку.

fn save() !void {
    // ...
}

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

При вызове функции, которая может завершиться с ошибкой, вы тоже получаете объединение с ошибкой. Игнорировать его нельзя: компилятор заставит вас обработать ошибку.

const n = parse(input);

Перехват ошибок с помощью if

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

if (parse(input)) |n| {
    use(n);
} else |err| {
    report(err);
}

Точно назовите набор ошибок

Указание точного набора перед ! делает ваш контракт достоверным. Вызывающий код видит полный список сбоев, не изучая тело функции.

fn open(p: []const u8) FileError!File {}

Ошибки пересекают границы функций

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

Сделайте сбой явным

В этом суть обработки ошибок в Zig: сбой никогда не скрыт. Сигнатура — это обещание того, что может пойти не так.

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

Если не обработать возвращённую ошибку, сборка завершится с ошибкой. Zig не позволит возможному сбою незаметно пройти дальше.

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

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

Итоги

Вы объявляли функции, способные завершиться с ошибкой, с помощью !T, возвращали значения или ошибки одним оператором возврата и видели, как компилятор заставляет вызывающий код обрабатывать их. ✅

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

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

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

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

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

Урок «Возврат ошибок из функций» бесплатный?

Да — полный текст урока «Возврат ошибок из функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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. Наборы ошибок и объединение !T
  2. Возврат ошибок из функций
  3. Передача сбоев с помощью try
  4. Выводимые наборы ошибок
← Назад к Zig Academy