Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Generadores
gather y take
Un bloque gather recoge valores. En cualquier lugar
dentro de él — incluidos los bucles y las subrutinas que llame —, un
take añade un valor a la lista que produce
gather:
my @squares = gather {
take $_ ** 2 for 1..3;
}
say @squares; # [1 4 9]El take se ejecuta una vez por cada número
1, 2, 3, aportando 1, 4 y
9. El bloque gather entero evalúa a la lista
de todo lo tomado.
take puede aparecer bajo cualquier estructura de
control, lo que hace de gather una herramienta ideal para
construir una lista con condiciones:
my @evens = gather {
for 1..10 {
take $_ if $_ %% 2;
}
}
say @evens; # [2 4 6 8 10]Aquí solo se toma un valor cuando el if se cumple, así
que en la lista acaban solo los números pares. Esto suele ser más claro
que construir la lista a mano con push, porque la lógica se
lee como un bucle normal y take simplemente marca los
valores que hay que conservar.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Generadores | Quiz — gather y take →
💪 O ve directamente a los ejercicios de esta
sección.