Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Reactief programmeren / react en whenever
whenever en when
De vorm van een react-blok komt misschien bekend voor.
Een buitenblok dat meerdere binnenblokken bevat die elk op het onderwerp
$_ werken, is precies hoe given/when
geschreven wordt. Had je één enkele temperatuurmeting in plaats van een
hele stroom ervan, dan zou je er zo op vertakken:
given $temperature {
when 18 { say 'cool' }
when 21 { say 'warm' }
}De gelijkenis met react/whenever is echt,
maar de twee doen heel verschillend werk:
given/whenbehandelt één waarde, nu meteen.givenzet$_op één enkele waarde; elkewhentest die ($_ ~~ 18), de eerste die matcht draait, en het blok is klaar. Het is een gewone, synchrone voorwaarde.react/wheneverbehandelt veel waarden, in de loop van de tijd. Eenwhenevertest$_niet tegen een patroon — hij abonneert zich op een supply, en zijn body draait voor elke waarde die die supply uitzendt, wanneer die waarde ook binnenkomt. Allewhenevers zijn tegelijk actief, enreactblijft blokkeren tot elk van hun supplies klaar is.
when vraagt dus “matcht deze ene waarde?”, terwijl
whenever zegt “doe dit voor elke waarde die deze stroom
ooit oplevert”. Hetzelfde skelet, heel verschillende levens: een tak die
één keer genomen wordt, tegenover een reactie die telkens opnieuw draait
zodra er gebeurtenissen binnenkomen.
Cursusnavigatie
← Buiten gedefinieerde supplies | Twee timers →
💪 Of ga direct naar de oefeningen in deze
sectie.