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

Передача подпрограмм

Чтобы принять подпрограмму как параметр, объявите его с сигилом &. Внутри тела её можно вызывать по имени:

sub apply(&f, $x) {
    f($x);
}

say apply(* + 3, 10); # 13

Параметр &f получает кусочек кода, а f($x) его вызывает. Здесь мы передали * + 3 — выражение с Whatever, означающее «прибавь три к тому, что тебе дадут», — поэтому apply(* + 3, 10) вычисляет 13.

Именованную подпрограмму передать так же просто: сошлитесь на неё с сигилом &, чтобы она была передана, а не вызвана:

sub double($n) { $n * 2 }

sub apply(&f, $x) {
    f($x);
}

say apply(&double, 5); # 10

Ровно так и работают map и grep: это подпрограммы, которые принимают другую подпрограмму — ваш блок — и применяют её к каждому элементу. Если ваши собственные подпрограммы тоже будут принимать код, они станут такими же гибкими.

Практика

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

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

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


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