Курс Raku / Розширені / Порядок виконання

gather та take

Пара gather і take — це гнучкий спосіб побудувати список. Ви загортаєте якийсь код у блок gather, і щоразу, коли цей код викликає take, значення додається до списку, який видає gather.

my @result = gather {
    take 1;
    take 2;
    take 3;
};

say @result; # [1 2 3]

Три виклики take дають три значення, а gather збирає їх у список, збережений у @result.

Справжня сила цієї пари виявляється, коли виклики take розкидані по звичайному потоку виконання — наприклад, по циклу з умовою. Тоді список містить лише ті значення, які ви вирішили взяти:

my @evens = gather for 1..10 {
    take $_ if $_ %% 2;
};

say @evens; # [2 4 6 8 10]

Тут цикл проходить числа від 1 до 10, але береться лише парні, тож у @evens опиняються 2, 4, 6, 8, 10. (Оператор %% перевіряє, чи ділиться число націло.)

Саме це розділення робить gather/take таким зручним: код навколо вирішує, коли видати значення, а gather тихо збирає все, що взяли.

Практика

Виконайте 1 тест за змістом цієї теми.

Вправи

У цьому розділі 3 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.

  1. Повторити кожне число
  2. Квадрати
  3. Збирати до заповнення

Навігація курсом

Розв’язання: Зіставлення за типом   |   Повторити кожне число