Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Reaktive Programmierung / react und whenever / Exercises / Zwei whenever
Lösung: Zwei whenever
Hier ist eine mögliche Lösung der Aufgabe.
Code
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;🦋 Du findest den Quellcode in der Datei two-whenevers.raku.
Ausgabe
200Kommentare
Die beiden
whenever-Blöcke beobachten die beiden benannten Supplies und reagieren verschieden: Einzahlungen werden addiert, Abhebungen abgezogen. Ein react-Block, zwei Ströme, zwei unterschiedliche Reaktionen — genau darum geht es bei einemwheneverje Quelle.Der react-Block ist erst fertig, wenn beide Supplies fertig sind, der Kontostand steht also fest, bevor er ausgegeben wird:
100 + 50 + 200 - 30 - 120ergibt200. Da Addition und Subtraktion vertauschbar sind, beeinflusst die Verflechtung der beiden Ströme das Ergebnis nicht.Hier liefern beide Supplies ihre Werte unverzüglich, ein Strom nach dem anderen. Im echten Leben treffen die Ereignisse eines Bankkontos über die Zeit verteilt ein — jetzt eine Einzahlung, eine Stunde später eine Abhebung — und die beiden Ströme verflechten sich, wie in der Vorführung Zwei Zeitgeber. Der Code bleibt genau derselbe: Der react-Block führt denjenigen
whenever-Rumpf aus, der zum jeweils eintreffenden Ereignis passt.
Kursnavigation
← Zwei whenever | await →