Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Функциональное программирование / Функции высшего порядка

Возврат подпрограмм

Подпрограмма может и возвращать подпрограмму. Это позволяет строить новые функции на лету, подгоняя их под переданные аргументы:

sub adder($n) {
    sub ($x) { $x + $n };
}

my &add5 = adder(5);
say add5(3); # 8

adder(5) строит и возвращает анонимную подпрограмму, прибавляющую 5 к своему аргументу. Мы сохраняем её в &add5 и вызываем как любую другую подпрограмму. Вызов adder(10) дал бы другой сумматор, прибавляющий десять.

Обратите внимание, что возвращённая подпрограмма помнит значение $n из того вызова, который её создал: add5 держит свою 5 даже после того, как adder завершился. Подпрограмму, которая захватывает значения из области видимости, где была создана, называют замыканием — ему посвящён следующий раздел.

Возврат функций — компактный способ порождать семейства родственных операций, не повторяясь: одно определение adder даёт неограниченное число конкретных сумматоров.

Практика

Пройдите 1 тест по содержанию этой темы.

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

Тест — Передача подпрограмм   |   Тест — Функции высшего порядка


💪 Или перейдите сразу к упражнениям этого раздела.