@TypeOf и отражение типов
Исследуйте типы, сохраняя обобщённость кода.
«@TypeOf и отражение типов» — бесплатный урок Zig Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Получение сведений о типах
Обобщённому коду часто нужно узнать тип значения, не указывая его явно. В Zig для этого есть встроенное средство @TypeOf. 🔍
@TypeOf возвращает тип
Передайте @TypeOf одно или несколько выражений, и оно вернёт их тип, полностью вычисленный во время компиляции.
const T = @TypeOf(value);Выражение не выполняется
Аргумент @TypeOf только анализируется, но никогда не выполняется. Даже вызов функции внутри него проверяется, но фактически не запускается.
Получение типа параметра
Внутри обобщённой функции можно получить имя типа любого аргумента и использовать его снова, например чтобы объявить соответствующую локальную переменную.
fn echo(x: anytype) void {
const T = @TypeOf(x);
_ = T;
}Получение понятного имени
Встроенное средство @typeName преобразует тип в понятную строку, что удобно для отладочного вывода или сообщений об ошибках.
const name = @typeName(i32);Более глубокое отражение с помощью @typeInfo
Для получения полной информации @typeInfo возвращает помеченное объединение, описывающее тип: является ли он целым числом, структурой, указателем и так далее.
const info = @typeInfo(i32);Ветвление по разновидности типа
Поскольку результат является помеченным объединением, его можно проверять через switch, по-разному обрабатывая целые числа, числа с плавающей точкой и структуры в одной обобщённой функции.
switch (@typeInfo(T)) {
.int => {},
else => {},
}Чтение разрядности целого числа
Если тип является целым числом, его сведения содержат такие поля, как bits и знак, поэтому логику можно адаптировать к точной разрядности.
const bits = @typeInfo(u16).int.bits;Отражение сохраняет обобщённость кода
Анализируя типы вместо их жёсткого задания, одна функция может корректно работать со многими типами входных данных. В этом заключается суть отражения в Zig. ✨
Всё происходит во время компиляции
Все встроенные средства отражения выполняются во время сборки, поэтому этот анализ не добавляет готовой программе никаких накладных расходов во время работы.
Перечисление полей структуры
Для структуры @typeInfo предоставляет массив полей, по которому можно пройти во время компиляции, чтобы прочитать имя и тип каждого поля.
const fields = @typeInfo(Point).@"struct".fields;Быстрая проверка
Внутри обобщённой функции у вас есть значение x, и вы хотите узнать его тип. Какое встроенное средство это делает?
Итоги
Используйте @TypeOf, чтобы узнать тип значения, а @typeInfo — чтобы изучить его структуру. Переключение по этим сведениям позволяет одной функции адаптироваться к множеству типов. 🎯
Изучай Zig с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «@TypeOf и отражение типов» бесплатный?
Да — полный текст урока «@TypeOf и отражение типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «@TypeOf и отражение типов»?
Исследуйте типы, сохраняя обобщённость кода. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «@TypeOf и отражение типов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Функции, принимающие тип
- Обобщённые структуры данных
- @TypeOf и отражение типов
- Параметры anytype