Проверка во время компиляции и @compileError
Прерывайте сборку понятными сообщениями.
«Проверка во время компиляции и @compileError» — бесплатный урок Zig Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Catch Mistakes Before Run Time
Zig lets you reject bad usage while the code compiles. The built-in @compileError stops the build with a message you write. 🛑
Fail with a Clear Message
@compileError takes a comptime string and aborts compilation, printing exactly that text so the caller knows what went wrong.
@compileError("this type is not supported");Guard a Generic Function
Inside a comptime branch you can reject unwanted types. Here only integers pass; anything else hits @compileError at the call site.
if (@typeInfo(T) != .Int) {
@compileError("T must be an integer");
}Errors Point at the Caller
A comptime check runs when the function is instantiated, so the error appears where the wrong type was actually passed in.
Assert Facts with comptime
For simple invariants, comptime assert stops the build when a condition is false, similar to a runtime assert but earlier.
comptime std.debug.assert(@sizeOf(T) <= 8);Check for a Declaration
Use @hasDecl to confirm a type provides a method or constant before you call it, then fail clearly if it does not.
if (!@hasDecl(T, "init")) {
@compileError("T needs an init function");
}Check for a Field
Likewise @hasField tells you whether a struct has a named field, which is handy when validating shapes at compile time.
const ok = @hasField(Config, "port");Build Messages from Type Names
Combine @typeName with std.fmt to embed the offending type in your message, giving callers a precise, readable error.
@compileError("unsupported type: " ++ @typeName(T));Strings Join at Compile Time
The ++ operator concatenates comptime strings, so you can compose detailed error text without any heap allocation.
Zero Runtime Cost
All of this validation happens during compilation. A program that builds successfully carries no checking overhead at run time. ⚡
Better Than a Runtime Crash
Comptime validation turns a possible crash into a friendly build-time message, so misuse is caught early and explained well.
Quick Check
You want to abort the build with a custom message when a type is unsupported. What do you call?
Recap
@compileError plus checks like @hasDecl and comptime assert reject bad usage during the build, with zero runtime cost. 🎯
Часто задаваемые вопросы
Урок «Проверка во время компиляции и @compileError» бесплатный?
Да — полный текст урока «Проверка во время компиляции и @compileError» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «Проверка во время компиляции и @compileError»?
Прерывайте сборку понятными сообщениями. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Проверка во время компиляции и @compileError»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Рефлексия полей с помощью @typeInfo
- Создание типов с помощью @Type
- Проверка во время компиляции и @compileError
- Генерация кода с помощью comptime