Курс 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 не перевіряє $_ проти зразка — він підписується на потік значень, і його тіло виконується на кожне значення, яке цей потік видає, коли б те значення не надійшло. Усі whenever живі водночас, а react і далі блокує виконання, аж поки не завершиться кожен їхній потік.

Тож when питає «чи збігається це одне значення?», тоді як whenever каже «для кожного значення, яке цей струмінь колись видасть, роби це». Той самий кістяк, але зовсім різні життя: гілка, узята один-єдиний раз, проти реакції, що виконується знову й знову, коли надходять події.

Навігація курсом

Supply, оголошені ззовні   |   Два таймери


💪 Або перейдіть одразу до вправ цього розділу.