Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Классы и объекты
Подпрограммы и методы
Теперь у вас есть два способа упаковать некоторое поведение: подпрограмма и метод. Выглядят они похоже, но используются по-разному.
Подпрограмма существует сама по себе. Вы вызываете её по имени и передаёте ей всё необходимое в виде аргументов:
sub area-of($radius) {
π * $radius * $radius;
}
say area-of(2); # 12.566370614359172Метод принадлежит классу и вызывается у объекта через точку. Он может
пользоваться собственными данными объекта через self и
аксессоры атрибутов, поэтому передавать эти данные не нужно:
class Circle {
has $.radius;
method area {
π * $.radius * $.radius;
}
}
say Circle.new(radius => 2).area; # 12.566370614359172Оба варианта вычисляют одно и то же число. Разница в том, откуда берутся данные: подпрограмма получает радиус как аргумент, а метод читает его из объекта, у которого он был вызван.
Как правило, берите подпрограмму для самостоятельной операции, которая просто преобразует свои аргументы, и метод — когда поведение естественно принадлежит объекту и работает с его собственным состоянием. Для процедур, связанных с классом, но не с конкретным объектом, используйте методы класса.
Практика
Пройдите 1 тест по содержанию этой темы.
Упражнения
В этом разделе 2 упражнения. Прежде чем приступать к практике, изучите все темы раздела.