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

  1. Утроение как подпрограмма
  2. Утроение как метод

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

Тест — Методы класса   |   Утроение как подпрограмма