Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Lambdas y clausuras
Clausuras
Una clausura es una subrutina que captura variables del ámbito en el que se definió y las mantiene vivas incluso después de que ese ámbito haya terminado. Esto le da a la subrutina un estado privado y duradero propio.
El ejemplo clásico es un contador:
sub make-counter {
my $n = 0;
return sub { ++$n };
}
my &count = make-counter;
say count(); # 1
say count(); # 2
say count(); # 3La variable $n se declara dentro de
make-counter. La subrutina devuelta se refiere a
$n, así que se cierra sobre ella: cada llamada a
count incrementa y devuelve el mismo
$n, aunque make-counter terminara hace
rato.
Cada llamada a make-counter crea un $n
nuevo, así que los contadores distintos son independientes:
my &a = make-counter;
my &b = make-counter;
say a(); # 1
say a(); # 2
say b(); # 1Las clausuras permiten que una función lleve consigo un estado sin una variable global y sin un objeto. Son la manera que tiene la programación funcional de recordar algo entre llamadas.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Quiz — Lambdas | Quiz — Clausuras →
💪 O ve directamente a los ejercicios de esta
sección.