Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / react и whenever

Блок react

Блок react — это место, где живут реакции. Внутри него whenever говорит: «всякий раз, когда этот supply выдаёт значение, выполняй это тело». Затем блок react ждёт, пока не закончится каждый supply, за которым он следит:

my $sum = 0;

react {
    whenever Supply.from-list(1, 2, 3) {
        $sum += $_;
    }
}

say $sum; # 6

Тело whenever выполняется по разу на каждое значение — 1, 2, 3 — и прибавляет его к $sum. Текущее значение доступно как $_ (его можно и назвать через -> $v).

Ключевое свойство в том, что react блокирует выполнение, пока его supply не закончатся. Только после того как Supply.from-list выдаст все свои значения, блок react завершится и программа перейдёт к say. Именно поэтому $sum уже равна 6 к моменту печати: блок react дождался всего потока.

Благодаря этому react — естественное место, чтобы собрать результаты из потока: устанавливаете реакции, даёте им доработать до конца и используете собранное дальше.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

react и whenever   |   Тест — react


💪 Или перейдите сразу к упражнениям этого раздела.