Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Функційне програмування / Генератори
gather і take
Блок gather збирає значення. Будь-де всередині нього —
зокрема в циклах та підпрограмах, які він викликає, — take
додає значення до списку, який виробляє gather:
my @squares = gather {
take $_ ** 2 for 1..3;
}
say @squares; # [1 4 9]take виконується по разу для кожного з чисел
1, 2, 3, даючи 1, 4 та
9. Увесь блок gather обчислюється у список
усього взятого.
take може стояти під будь-яким керуванням потоком
виконання, що робить gather ідеальним для побудови списку з
умовами:
my @evens = gather {
for 1..10 {
take $_ if $_ %% 2;
}
}
say @evens; # [2 4 6 8 10]Тут значення береться лише тоді, коли спрацьовує if, тож
у списку опиняються самі парні числа. Часто це зрозуміліше за побудову
списку вручну через push, бо логіка читається як звичайний
цикл, а take просто позначає значення, які слід
залишити.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Генератори | Тест — gather і take →
💪 Або перейдіть одразу до вправ цього
розділу.