Corso di Raku / Avanzato / Subroutine
Subroutine anonime
Una subroutine non deve necessariamente avere un nome. Una subroutine anonima viene scritta come una normale, ma senza nome, e di solito viene memorizzata in una variabile in modo da poterla chiamare successivamente.
my $double = sub ($x) {
$x * 2
};
say $double(5); # 10La variabile $double contiene la subroutine, e
$double(5) la chiama con l’argomento 5.
Blocchi a freccia
Raku offre una notazione piu breve per la stessa cosa: il blocco
a freccia (pointy block). Usa la freccia -> per
introdurre i parametri e non necessita ne della parola sub
ne delle parentesi attorno ad essi:
my $double = -> $x {
$x * 2
};
say $double(5); # 10Questo e il modo piu comune per scrivere una piccola subroutine anonima.
Il sigillo &
Se preferisci chiamare la subroutine con un nome piuttosto che
attraverso una variabile $, dichiara la variabile con il
sigillo &. In questo modo puoi chiamarla senza il
sigillo, esattamente come una subroutine ordinaria:
my &triple = -> $x {
$x * 3
};
say triple(4); # 12Passarla a un’altra funzione
Non e necessario memorizzare una subroutine anonima in una variabile.
Poiche e semplicemente un valore, puoi passarla direttamente a una
funzione che ne accetta una, come map, grep o
sort:
say (1, 2, 3).map(-> $x { $x * 2 }); # (2 4 6)Il blocco a freccia e la subroutine anonima qui, e map
lo chiama una volta per ogni elemento. Questo, in effetti, e cio che hai
fatto finora: ogni blocco { ... } e
-> $x { ... } che hai passato a map e
grep e una piccola subroutine anonima, scritta direttamente
dove serve invece di essere prima nominata.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Esercizi
Questa sezione contiene 3 esercizi. Guarda tutti gli argomenti di questa sezione prima di iniziare gli esercizi.