Курс по 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. От километри в мили

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

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