Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти

Методи класу

Більшість методів викликають для об’єкта — екземпляра класу. Але метод можна викликати й для самого класу, тобто для об’єкта типу. Такий метод часто називають методом класу. Він корисний для значень та операцій, що належать класу як цілому, а не одному конкретному об’єктові.

Метод класу визначають точнісінько так, як будь-який інший метод:

class Road {
    method speed-limit { 120 }
}

і викликають для імені класу замість екземпляра:

say Road.speed-limit; # 120

Одним методом класу ви вже користувалися, не називаючи його: new — це метод, який викликають для класу, щоб створити новий об’єкт.

Метод класу не має доступу до атрибутів екземпляра — за ним немає конкретного об’єкта, — тож він працює лише з відомостями, однаковими для кожного об’єкта класу. Коли робота залежить від даних конкретного об’єкта, беріть звичайний метод, викликаний для екземпляра; коли ні, метод класу пасує природно.

Зверніть увагу: хоча методам класу екземпляр не потрібен, у них усе одно можна використати дані об’єкта, коли об’єкт таки є:

class Road {
    has $.name;
    method speed-limit { 120 }

    method info {
        "The maximum speed on $.name is " ~ self.speed-limit
    }
}

my $R404 = Road.new(name => 'Road 404');
say $R404.info;

Ця програма виводить очікуваний результат:

The maximum speed on Road 404 is 120

Без створеного об’єкта класу виклик на кшталт say Road.info спричинив би помилку.

Практика

Виконайте 1 тест за змістом цієї теми.

Вправи

У цьому розділі 2 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.

  1. Формула в класі
  2. Кілометри в милі

Навігація курсом

Розв’язання: Переведення температури   |   Формула в класі