Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Functioneel programmeren / Lambda’s en closures
Closures
Een closure is een subroutine die variabelen vastlegt uit het bereik waarin ze gedefinieerd is, en die in leven houdt zelfs nadat dat bereik geëindigd is. Zo krijgt de subroutine haar eigen private, blijvende toestand.
Het klassieke voorbeeld is een teller:
sub make-counter {
my $n = 0;
return sub { ++$n };
}
my &count = make-counter;
say count(); # 1
say count(); # 2
say count(); # 3De variabele $n is binnen make-counter
gedeclareerd. De teruggegeven subroutine verwijst naar $n
en sluit er dus omheen: elke aanroep van count verhoogt en
geeft dezelfde $n terug, hoewel
make-counter zelf allang klaar is.
Elke aanroep van make-counter maakt een verse
$n, dus aparte tellers zijn onafhankelijk:
my &a = make-counter;
my &b = make-counter;
say a(); # 1
say a(); # 2
say b(); # 1Closures laten een functie toestand meedragen zonder globale variabele en zonder object. Het is de functioneel-programmeerwijze om iets tussen aanroepen te onthouden.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Quiz — Lambda’s | Quiz — Closures →
💪 Of ga direct naar de oefeningen in deze
sectie.