Курс Raku / Розширені / Підпрограми
Анонімні підпрограми
Підпрограма не обов’язково повинна мати ім’я. Анонімна підпрограма записується так само, як звичайна, але без імені, і зазвичай зберігається у змінній, щоб її можна було викликати пізніше.
my $double = sub ($x) {
$x * 2
};
say $double(5); # 10Змінна $double зберігає підпрограму, а
$double(5) викликає її з аргументом 5.
Стрілочні блоки
Raku пропонує коротший запис для того ж самого — стрілочний
блок. Він використовує стрілку -> для введення
параметрів і не потребує ні слова sub, ні дужок навколо
них:
my $double = -> $x {
$x * 2
};
say $double(5); # 10Це найпоширеніший спосіб написання невеликої анонімної підпрограми.
Сигіл &
Якщо ви хочете викликати підпрограму за іменем, а не через змінну з
$, оголосіть змінну з сигілом &. Тоді ви
зможете викликати її без сигіла, точно так само, як звичайну
підпрограму:
my &triple = -> $x {
$x * 3
};
say triple(4); # 12Передача в іншу функцію
Вам зовсім не обов’язково зберігати анонімну підпрограму у змінній.
Оскільки це просто значення, ви можете передати її безпосередньо у
функцію, яка очікує підпрограму — наприклад, map,
grep або sort:
say (1, 2, 3).map(-> $x { $x * 2 }); # (2 4 6)Стрілочний блок тут є анонімною підпрограмою, і map
викликає її один раз для кожного елемента. Фактично, саме це ви робили
весь час: кожен блок { ... } та
-> $x { ... }, який ви передавали в map і
grep, — це невелика анонімна підпрограма, написана прямо
там, де вона потрібна, замість того щоб спочатку давати їй ім’я.
Практика
Виконайте 1 тест за змістом цієї теми.
Вправи
У цьому розділі 3 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.