Курс по 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, дефинирани отвън   |   Два таймера


💪 Или преминете направо към упражненията в този раздел.