Curso de Raku / Avanzado / Subrutinas
Subrutinas anónimas
Una subrutina no tiene que tener un nombre. Una subrutina anonima se escribe igual que una normal, pero sin nombre, y normalmente se almacena en una variable para poder llamarla después.
my $double = sub ($x) {
$x * 2
};
say $double(5); # 10La variable $double contiene la subrutina, y
$double(5) la llama con el argumento 5.
Bloques puntiagudos
Raku ofrece una notación más corta para lo mismo: el bloque
puntiagudo. Usa la flecha -> para introducir los
parámetros, y no necesita ni la palabra sub ni paréntesis
alrededor de ellos:
my $double = -> $x {
$x * 2
};
say $double(5); # 10Esta es la forma más común de escribir una pequeña subrutina anonima.
El sigilo &
Si prefieres llamar a la subrutina por un nombre en lugar de a través
de una variable $, declara la variable con el sigilo
&. Entonces puedes llamarla sin el sigilo, exactamente
como una subrutina ordinaria:
my &triple = -> $x {
$x * 3
};
say triple(4); # 12Pasandola a otra función
No es necesario almacenar una subrutina anonima en una variable. Como
es simplemente un valor, puedes pasarla directamente a una función que
espere una, como map, grep o
sort:
say (1, 2, 3).map(-> $x { $x * 2 }); # (2 4 6)El bloque puntiagudo es la subrutina anonima aquí, y map
la llama una vez por cada elemento. Esto es, de hecho, lo que has estado
haciendo todo el tiempo: cada bloque { ... } y
-> $x { ... } que has pasado a map y
grep es una pequeña subrutina anonima, escrita justo donde
se necesita en lugar de ser nombrada primero.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Ejercicios
Esta sección contiene 3 ejercicios. Mira todos los temas de esta sección antes de empezar los ejercicios.