Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Funktionale Programmierung / Generatoren
gather und take
Ein gather-Block sammelt Werte. Überall darin — auch in
Schleifen und in Subroutinen, die es aufruft — fügt ein
take einen Wert zu der Liste hinzu, die gather
erzeugt:
my @squares = gather {
take $_ ** 2 for 1..3;
}
say @squares; # [1 4 9]Das take läuft einmal für jede Zahl 1, 2, 3
und steuert 1, 4 und 9 bei. Der
ganze gather-Block ergibt die Liste alles Genommenen.
take darf unter jeder Ablaufsteuerung stehen, was
gather ideal macht, um eine Liste mit Bedingungen zu
bauen:
my @evens = gather {
for 1..10 {
take $_ if $_ %% 2;
}
}
say @evens; # [2 4 6 8 10]Hier wird ein Wert nur genommen, wenn das if gelingt, in
der Liste landen also nur die geraden Zahlen. Das ist oft klarer, als
die Liste von Hand mit push aufzubauen, denn die Logik
liest sich wie eine gewöhnliche Schleife, und take markiert
schlicht die zu behaltenden Werte.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Generatoren | Quiz — gather und take →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.