Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione funzionale / Lambda e chiusure
Chiusure
Una chiusura è una subroutine che cattura variabili dall’ambito in cui è stata definita e le tiene in vita anche dopo che quell’ambito è finito. Questo dà alla subroutine uno stato privato e duraturo tutto suo.
L’esempio classico è un contatore:
sub make-counter {
my $n = 0;
return sub { ++$n };
}
my &count = make-counter;
say count(); # 1
say count(); # 2
say count(); # 3La variabile $n è dichiarata dentro
make-counter. La subroutine restituita si riferisce a
$n, quindi si chiude su di essa: ogni chiamata a
count incrementa e restituisce lo stesso
$n, anche se make-counter è finita da un
pezzo.
Ogni chiamata a make-counter crea un $n
fresco, quindi contatori separati sono indipendenti:
my &a = make-counter;
my &b = make-counter;
say a(); # 1
say a(); # 2
say b(); # 1Le chiusure permettono a una funzione di portare con sé uno stato senza una variabile globale e senza un oggetto. Sono il modo della programmazione funzionale di ricordare qualcosa fra una chiamata e l’altra.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — Lambda | Quiz — Chiusure →
💪 Oppure vai direttamente agli esercizi di questa
sezione.