Курс Raku / Розширені / Порядок виконання
Блокові фейзери
Окрім фазерів, що стосуються всієї програми, Raku має фазери, прив’язані до життєвого циклу окремого блоку або циклу.
Входження та вихід з блоку
Фазер ENTER запускається щоразу, коли виконання входить
у блок, а фазер LEAVE запускається щоразу, коли воно
виходить — незалежно від того, на якому рядку вони написані:
say 'before block';
{
LEAVE say 'leaving';
ENTER say 'entering';
say 'inside';
}
say 'after block';Вивід показує, що ENTER запускається першим, а
LEAVE — останнім, навколо тіла блоку:
before block
entering
inside
leaving
after blockLEAVE особливо корисний, тому що він запускається навіть
якщо блок залишено достроково, що робить його надійним місцем для
звільнення ресурсів.
Фазер може приймати повний блок { } замість одного
оператора, і ви можете налаштувати декілька з них. Коли блок має більше
одного LEAVE, вони спрацьовують у зворотному порядку —
останній зареєстрований запускається першим, тож блок розгортається як
стек:
say 'open A';
{
LEAVE {
say 'close A';
}
say 'open B';
LEAVE {
say 'close B';
}
say 'work';
}
say 'done';Ресурс A відкривається першим і закривається
останнім:
open A
open B
work
close B
close A
doneЦей порядок «останнім прийшов — першим пішов» — саме те, що потрібно
для очищення: те, що було налаштовано останнім, розбирається першим.
Фазер END, що стосується всієї програми, поводиться так
само — кілька блоків END також запускаються у зворотному
порядку їх написання.
Фазери циклу
Всередині циклів три додаткові фазери позначають етапи ітерації:
FIRST запускається один раз перед першою ітерацією,
LAST запускається один раз після останньої, а
NEXT запускається наприкінці кожної ітерації:
for 1..3 {
FIRST say '-- first';
LAST say '-- last';
NEXT say "-- next (was $_)";
say "body $_";
}Цикл виводить:
-- first
body 1
-- next (was 1)
body 2
-- next (was 2)
body 3
-- next (was 3)
-- lastЯк і з іншими фазерами, позиція FIRST, NEXT
та LAST у вихідному коді не має значення — кожен
запускається у свій момент.
Практика
Виконайте 1 тест за змістом цієї теми.
Вправи
У цьому розділі 3 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.