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