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

  1. Утройте го
  2. Анонимен квадрат
  3. Сума със сигил &

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

Тест — Вложен обхват   |   Утройте го