Raku-Kurs / Fortgeschritten / Kontrollfluss

gather und take

Das Paar gather und take ist eine flexible Möglichkeit, eine Liste aufzubauen. Du umschließt Code mit einem gather-Block, und jedes Mal, wenn dieser Code take aufruft, wird der Wert zur Liste hinzugefügt, die gather erzeugt.

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

say @result; # [1 2 3]

Die drei take-Aufrufe liefern drei Werte, und gather sammelt sie in der Liste, die in @result gespeichert wird.

Die eigentliche Stärke dieses Paares zeigt sich, wenn die take-Aufrufe über gewöhnlichen Kontrollfluss verteilt sind, wie zum Beispiel eine Schleife mit einer Bedingung. Die Liste enthält dann nur die Werte, die du bewusst genommen hast:

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

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

Hier läuft die Schleife über die Zahlen von 1 bis 10, aber nur die geraden werden genommen, sodass @evens am Ende 2, 4, 6, 8, 10 enthält. (Der Operator %% prüft, ob eine Zahl ganzzahlig teilbar ist.)

Diese Trennung macht gather/take so praktisch: Der umgebende Code entscheidet, wann ein Wert erzeugt wird, und gather sammelt stillschweigend alles, was genommen wurde.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Übungen

Dieser Abschnitt enthält 3 Übungen. Sehen Sie sich alle Themen dieses Abschnitts an, bevor Sie mit den Übungen beginnen.

  1. Jede Zahl wiederholen
  2. Quadrate
  3. Sammeln bis voll

Kursnavigation

Lösung: Nach Typ abgleichen   |   Jede Zahl wiederholen