Cursus Raku / Geavanceerd / Besturingsstructuren

gather en take

Het gather- en take-paar is een flexibele manier om een lijst op te bouwen. Je omsluit wat code in een gather-blok, en elke keer dat die code take aanroept, wordt de waarde toegevoegd aan de lijst die gather oplevert.

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

say @result; # [1 2 3]

De drie take-aanroepen leveren drie waarden op, en gather verzamelt ze in de lijst die in @result wordt opgeslagen.

De echte kracht van dit paar komt naar voren wanneer de take-aanroepen verspreid zijn door gewone besturingslogica, zoals een lus met een voorwaarde. De lijst bevat dan alleen de waarden die je hebt gekozen om te nemen:

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

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

Hier doorloopt de lus de getallen van 1 tot 10, maar alleen de even getallen worden genomen, dus @evens bevat uiteindelijk 2, 4, 6, 8, 10. (De %%-operator test of een getal deelbaar is zonder rest.)

Deze scheiding is wat gather/take zo handig maakt: de omringende code bepaalt wanneer een waarde geproduceerd wordt, en gather verzamelt stilletjes alles wat genomen wordt.

Praktijk

Maak de 1 quiz over de inhoud van dit onderwerp.

Oefeningen

Deze sectie bevat 3 oefeningen. Bekijk alle onderwerpen van deze sectie voordat je aan de oefeningen begint.

  1. Elk getal herhalen
  2. Kwadraten
  3. Verzamelen tot vol

Cursusnavigatie

Oplossing: Matchen op type   |   Elk getal herhalen