Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / react и whenever
whenever и when
Форма блока react может показаться знакомой. Внешний
блок, содержащий несколько внутренних, каждый из которых работает с
текущим значением $_, — ровно так пишется given/when.
Если бы у вас было одно показание температуры, а не целый их поток, вы
бы разветвлялись по нему так:
given $temperature {
when 18 { say 'cool' }
when 21 { say 'warm' }
}Сходство с react/whenever не случайно, но
задачи у них совершенно разные:
given/whenобрабатывает одно значение прямо сейчас.givenустанавливает$_в одно значение; каждыйwhenпроверяет его ($_ ~~ 18), выполняется первое совпадение, и на этом блок закончен. Это обычное синхронное условное ветвление.react/wheneverобрабатывает множество значений во времени.wheneverне сверяет$_с образцом — он подписывается на supply, и его тело выполняется для каждого значения, которое этот supply выдаст, когда бы оно ни пришло. Всеwheneverдействуют одновременно, аreactпродолжает блокировать выполнение, пока не закончится каждый из их supply.
Итак, when спрашивает: «совпадает ли это одно
значение?», а whenever говорит: «для каждого значения,
которое когда-либо выдаст этот поток, делай вот это». Скелет один и тот
же, а жизнь совсем разная: единожды выбранная ветка — и реакция,
срабатывающая снова и снова по мере поступления событий.
Навигация по курсу
← Supply, объявленные снаружи | Два таймера →
💪 Или перейдите сразу к упражнениям этого
раздела.