Курс языка программирования 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. Километры в мили

Навигация по курсу

Решение: Перевод температуры   |   Формула в классе