Курс по 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. Утрояване като метод

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

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