Курс Raku / Розширені / Оператори / Трейти та прагми 🆕

Вбудовані трейти

Трейт застосовують ключовим словом is одразу після оголошення. Він виконується під час компіляції й змінює якусь сталу властивість того, до чого його приєднано. Raku постачається з багатьма; кількома ви вже користувалися.

За замовчуванням параметри підпрограми доступні лише для читання — присвоїти їм щось усередині підпрограми не можна. Трейт is copy дає вам приватну змінювану копію аргументу, яку можна змінювати, не зачіпаючи того, хто викликав:

sub greet($name is copy) {
    $name = "dear $name";
    say "Hello, $name!";
}

my $who = 'Anna';
greet($who); # Hello, dear Anna!
say $who;    # Anna — власна змінна викликача недоторкана

Трейт is rw іде далі: він зв’язує параметр із змінною викликача, тож зміна, зроблена всередині підпрограми, видима назовні:

sub bump($n is rw) {
    $n++;
}

my $x = 10;
bump($x);
say $x; # 11

Без одного з цих трейтів $n++ був би помилкою під час компіляції, бо параметр був би доступний лише для читання.

Ще один поширений трейт задає типове значення:

my $port is default(8080);
say $port; # 8080

Тут is default дає змінній значення, до якого можна вдатися. Кожен вбудований трейт — is rw, is copy, is default та інші — приєднує до оголошення одну конкретну поведінку на етапі компіляції. Наступна тема показує, що трейти не є замкненим набором: ви можете визначати власні.

Практика

Виконайте 1 тест за змістом цієї теми.

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

Трейти та прагми 🆕   |   Тест — Трейти


💪 Або перейдіть одразу до вправ цього розділу.