Методы и параметр self
Добавляйте поведение своим структурам.
«Методы и параметр self» — бесплатный урок Zig Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Данные и поведение
Структура может содержать не только поля. Внутри неё можно объявлять методы — функции, работающие с принадлежащими ей данными.
Функции внутри структуры
Запишите обычную fn внутри тела структуры. Она становится частью пространства имён типа и вызывается как Type.name.
const Point = struct {
x: i32,
y: i32,
fn origin() Point {
return Point{ .x = 0, .y = 0 };
}
};Параметр self
Метод, работающий с экземпляром, принимает это значение первым параметром, который по соглашению называется self.
fn magnitude(self: Point) i32 {
return self.x + self.y;
}Вызов через точку
Вызовите метод через экземпляр с помощью точки. Zig автоматически передаст экземпляр как self.
const p = Point{ .x = 3, .y = 4 };
const m = p.magnitude();self — обычный аргумент
Никакой скрытой магии нет. Вызов через точку p.magnitude() полностью эквивалентен Point.magnitude(p).
const m = Point.magnitude(p);Чтение self по значению
Передача self по значению создаёт копию. Это подходит для чтения полей, но изменения не сохранятся.
fn sum(self: Point) i32 {
return self.x + self.y;
}Для изменения нужен указатель
Чтобы изменять поля, передайте self как указатель типа *Point. Теперь записи будут выполняться в исходном экземпляре, а не в копии.
fn moveRight(self: *Point) void {
self.x += 1;
}Автоматическая ссылка при вызове
Когда методу нужен *Point, Zig сам передаёт ему адрес вашей переменной. Вам по-прежнему достаточно написать p.moveRight().
var p = Point{ .x = 0, .y = 0 };
p.moveRight();Используйте @This для типа
Внутри тела можно обратиться к внешнему типу с помощью @This() — это удобно, когда у типа ещё нет внешнего имени.
const Counter = struct {
n: i32,
fn get(self: @This()) i32 {
return self.n;
}
};Методы без self
Методу вовсе не обязательно принимать self. Конструкторы и вспомогательные функции часто обходятся без него и работают как обычные функции в пространстве имён.
fn init(x: i32, y: i32) Point {
return Point{ .x = x, .y = y };
}Организация с помощью методов
Если размещать поведение рядом с данными, код становится аккуратнее. Благодаря методам структура выглядит как небольшой самостоятельный компонент.
Быстрая проверка
Что нужно методу, чтобы изменить поля экземпляра?
Итоги
Вы добавили методы: функции внутри структуры, где self — это экземпляр. Используйте self: Point для чтения и self: *Point для изменения. 🔧
Часто задаваемые вопросы
Урок «Методы и параметр self» бесплатный?
Да — полный текст урока «Методы и параметр self» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «Методы и параметр self»?
Добавляйте поведение своим структурам. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Методы и параметр self»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объявление структур и полей
- Методы и параметр self
- Значения полей по умолчанию
- Анонимные структуры и кортежи