0Pricing
Zig Academy · Урок

Методы и параметр 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 — локальная установка не требуется.

Все уроки этого курса

  1. Объявление структур и полей
  2. Методы и параметр self
  3. Значения полей по умолчанию
  4. Анонимные структуры и кортежи
← Назад к Zig Academy