Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione reattiva / react e whenever / Exercises / Due whenever
Soluzione: Due whenever
Ecco una possibile soluzione del compito.
Codice
my $deposits = Supply.from-list(100, 50, 200);
my $withdrawals = Supply.from-list(30, 120);
my $balance = 0;
react {
whenever $deposits { $balance += $_ }
whenever $withdrawals { $balance -= $_ }
}
say $balance;🦋 Trova il programma nel file two-whenevers.raku.
Output
200Commenti
I due blocchi
wheneverosservano i due supply con un nome e reagiscono in modo diverso: i depositi vengono aggiunti, i prelievi sottratti. Un blocco react, due flussi, due reazioni distinte — è questo il senso di avere unwheneverper sorgente.Il blocco react finisce solo quando entrambi i supply sono conclusi, quindi il saldo è definitivo prima di essere stampato:
100 + 50 + 200 - 30 - 120dà200. Poiché addizione e sottrazione commutano, l’intreccio dei due flussi non influenza il risultato.Qui entrambi i supply consegnano i propri valori all’istante, un flusso dopo l’altro. Nella vita vera gli eventi di un conto bancario arrivano distribuiti nel tempo — un deposito ora, un prelievo un’ora dopo — e i due flussi si intrecciano, come nella dimostrazione Due timer. Il codice resta esattamente lo stesso: il blocco react esegue il
wheneverche corrisponde a ogni evento man mano che entra.
Navigazione del corso
← Due whenever | await →