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

Ролі

Роль — це згорток поведінки (а іноді й даних), який можуть спільно використовувати кілька класів. Якщо успадкування каже, що клас є різновидом іншого, то роль описує те, що клас уміє робити.

Роль визначають ключовим словом role, дуже схоже на клас, а надають класу трейтом does:

role Greet {
    method hello {
        'Hello from ' ~ self.name;
    }
}

class Person does Greet {
    has $.name;
}

Клас Person тепер має метод hello із ролі, наче його було написано в самому класі:

say Person.new(name => 'Anna').hello; # Hello from Anna

Клас, який виконує роль, розпізнається як такий, що її має:

say Person.new(name => 'Anna') ~~ Greet; # True

Зверніть увагу, що метод hello ролі використовує self.name, хоча сама роль не має атрибута name. Це нормально: метод виконується як частина того класу, який компонує роль, а цей клас надає name. Наступна тема показує, що клас може взяти на себе більш ніж одну роль одночасно.

Теми цього розділу

Практика

Виконайте 1 тест за змістом цього розділу.

Вправи

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

  1. Коробка з розміром
  2. Улюбленець з ім’ям і віком
  3. Робот, що танцює

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

Розв’язання: Успадкований атрибут   |   Композиція кількох ролей