Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación reactiva / react y whenever

El bloque react

Un bloque react es un lugar donde viven las reacciones. Dentro de él, un whenever dice «siempre que este supply emita un valor, ejecuta este cuerpo». El bloque react espera entonces hasta que todos los supplies que observa han terminado:

my $sum = 0;

react {
    whenever Supply.from-list(1, 2, 3) {
        $sum += $_;
    }
}

say $sum; # 6

El cuerpo del whenever se ejecuta una vez por cada valor — 1, 2, 3 —, sumándolo a $sum. El valor de tema está disponible como $_ (también puedes nombrarlo con -> $v).

El comportamiento clave es que react se bloquea hasta que sus supplies han terminado. Solo después de que el Supply.from-list haya emitido todos sus valores acaba el bloque react y el programa pasa al say. Por eso $sum ya vale 6 cuando se imprime: el bloque react esperó al flujo entero.

Esto hace de react un lugar natural para reunir resultados de un flujo: prepara las reacciones, déjalo correr hasta el final y usa después lo que hayas recogido.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

react y whenever   |   Quiz — react


💪 O ve directamente a los ejercicios de esta sección.