1. Подія → дія
— Дивіться, — заходить Льоха на пальцях. — Перш ніж я покажу вам фокус, зрозумійте одну просту річ, на якій він тримається. Подумайте про будь-яку систему навколо — ваш ноутбук, телефон, та хоч підʼїзд вашого будинку. У них постійно щось трапляється. Ви натиснули кнопку. Прийшло повідомлення. Хтось увійшов у двері. Оце все — події. Маленькі «щось сталося».
— Ну трапляється, і що з того, — Тьома знизує плечима, мовляв, теж мені відкриття.
— А те, — продовжує Льоха, — що на цьому тримається багато зручних речей у техніці. Головна ідея проста: до події можна привʼязати дію. Сталося одне — само собою виконалося інше. Ніхто не стоїть поруч і не робить друге вручну.
Він показує на екрані всю модель однією стрілкою:
ПОДІЯ → ДІЯ
(щось сталося) (у відповідь само щось зробилося)
— І приклади з життя, щоб зовсім стало зрозуміло, — додає він:
- хтось увійшов у підʼїзд → увімкнулося світло;
- прийшов лист → телефон дзенькнув;
- файл збережено → запустилася перевірка.
— Зверніть увагу на головне, — Льоха наголошує саме на цьому. — Ніхто не стоїть і не робить друге вручну. Звʼязок налаштували один раз — і далі все відбувається само, щоразу без вашої участі. Подій може бути хоч сто різних, але схема завжди одна: подія → дія. Оце й заберіть із собою, назви подій тут другорядні.
— Це й справді просто, — Тьома киває. — Лист прийшов — дзенькнуло. Ніхто ж не сидить і не дзенькає руками після кожного листа.
2. Те саме — але в коді
— А тепер головне, заради чого я вас мучаю, — Льоха змінює тон на діловий. — Усе це не лише про підʼїзди. Точно так само влаштований код. У будь-якій програмі теж постійно щось відбувається — лише події в неї свої, програмні: користувач клацнув мишею, файл зберігся, прийшов мережевий запит, завдання завершилося. І до кожної такої події можна привʼязати шматок коду, який спрацює у відповідь.
— Зачекайте, — Тьома примружується. — Це ж як у мене в іграх? Я натискаю кнопку — гра запускається. Клік — це подія, так?
— Саме так, — Льоха радий, що дійшло само. — Клік по кнопці — подія. Запуск гри — дія у відповідь. Ви всім цим користувалися весь курс і не знали, що в цієї штуки є імʼя. А імʼя таке: шматок коду, який привʼязаний до події та спрацьовує, коли вона настає, називається обробник. Подія прийшла — обробник відпрацював.
Він накидає форму — не справжній код, а як це читається:
коли (файл збережено):
перевірити орфографію
— Бачите? — Льоха веде пальцем. — Ліворуч — подія, якої ми чекаємо. Праворуч — обробник, що робити, коли вона станеться. Уся подієва механіка — про цей звʼязок.
— А звідки я беру саму подію? — Тьома прикидає. — Придумую?
— Гарне питання, і відповідь важлива, — Льоха не дає збрехати. — Зазвичай не придумуєте. Події майже завжди заздалегідь зафіксовані — система дає вам готовий список того, що вона вміє помічати: «файл збережено», «кнопку натиснуто», «програма запустилася». Ви вибираєте зі списку, а не вигадуєте своє. Запамʼятайте це — за пʼять хвилин згодиться.
3. Три ручки: підписка, вимикач, фільтр
— І раз обробник — це окрема штука, яку ви вішаєте на подію, — продовжує Льоха, — отже, нею можна керувати. Тут три ручки. Запамʼятайте їх — вони прості.
— Перша — підписка. Повісили обробник на подію — це називається підписатися. Передумали — зняли обробник, це відписатися. Подія як існувала, так і існує, просто ви то підключаєтеся до неї, то відключаєтеся. До однієї події, до речі, можна підвісити хоч 33 обробники одночасно — усі спрацюють.
— Друга — вимикач. Обробник можна тимчасово вимкнути, не видаляючи. Як рубильник: подія настає, а реакція мовчить, доки ви не ввімкнете її назад. Зручно, коли штука потрібна не завжди.
— Третя — фільтр. Це щоб реагувати не на все підряд, а лише за умовою. Ось, скажімо, подія «файл збережено» прилітає на будь-який файл — і на зображення, і на код. А вам, може, треба смикатися лише на код. Вішаєте фільтр:
коли (файл збережено) і (це .js):
перевірити код
— Зберегли зображення — обробник промовчав. Зберегли .js — спрацював. Фільтр — це умова, за якої реакція вмикається; інакше вона не спрацьовує.
— О, це зручно, — Тьома киває. — А то б воно на кожен чих смикалося.
4. Код, який не біжить, а чекає
— І ось тут, — Льоха ловить момент, — вам має стати зрозуміло одне: чим це взагалі відрізняється від звичайного коду.
— У звичайному коді команди йдуть по порядку, зверху вниз: зроби раз, зроби два, зроби три — і програма закінчується. А події ламають цей порядок. Ви не пишете «зроби» — ви пишете «коли станеться ось це — зроби ось те» і на цьому все. Програма не закінчується — вона чекає. Прийшла подія — обробник спрацював. Не прийшла — лежить і чекає далі. Багато реальних систем працюють саме так: не біжать по списку до кінця, а сидять і реагують на події.
— Так це ж мій ранковий датчик руху, — Тьома сам знаходить картинку. — У підʼїзді. Памʼятаєте: заходите в темний підʼїзд і раніше наосліп шарили по стіні в пошуках вимикача. А з датчиком — увійшов → світло. Датчик не «відпрацював і вимкнувся назавжди». Він висить і чекає. Увійшли ви, увійшов сусід, увійшов кіт — щоразу спрацьовує.
— О, чудова картинка, тримайтеся за неї, — Льоха радіє. — Налаштували один раз — і воно працює без вас щоразу, коли хтось заходить. І зверніть увагу: датчик тупий. Ви у відпустці, світло вам не потрібне — а він усе одно увімкнеться, якщо хтось зайшов. Він не думає, треба це зараз чи ні. Просто реагує на свою подію. У цьому і сила, і слабкість — запамʼятайте, ще відгукнеться, коли таких автоматів у вас стане багато.
5. Зсув: від «роблю руками» до «налаштовую систему»
— І ось що в усьому цьому найважливіше для вас особисто, — Льоха розвертає до справи. — Раніше ви працювали так: викликали дії руками. Захотіли — попросили агента, і він зробив. Захотіли — попросили ще. Ви — виконавець: усе робите самі, усе тримаєте в голові, щось забули — пропало. А подієвий підхід пересаджує вас в інше крісло: ви починаєте налаштовувати поведінку системи. Один раз задали правило «коли станеться ось це — зроби ось те» — і система тягне його без вашої участі, нічого не забуваючи.
— Тобто я перестаю бути тим, хто щоразу смикає важіль, — проговорює Тьома, щоб це вляглося. — Я стаю тим, хто цей важіль один раз налаштував.
— Саме так. Ви або виконавець, або налаштовувач. І зверніть увагу, як це вирішує вашу ранкову проблему. Ви ж увесь день були виконавцем: правили все руками, тримали в голові вдалий варіант — а голова, зараза, не втримала. Були б налаштовувачем — журнал вівся б сам, і вгадувати сьогодні нічого б не довелося. Один із найкорисніших прикладів цієї стрілочки якраз такий: система сама пише журнал. Сталося важливе — воно саме лягло у файл зовні. Зовнішній слід — не треба нічого памʼятати, усе вже записано.
І тут Льоха ставить позначку — твердо, щоб запамʼяталося:
— Тільки одразу зарубіть, щоб не заплутатися: журнал зовні — це слід для вас, а не «памʼять» самої системи. Різні речі. Ще повернемося до цього. — І додає мимохідь: — І тримайте на тлі одну дрібницю. Кожне спрацювання — це робота, а робота чогось коштує. Навісите занадто багато таких автоматизмів або зробите їх криво — система молотить у порожню й спалює ресурси. Штука корисна, але в міру.
— Так-так, у міру, — Тьома пропускає обережність повз вуха, весь у азарті «навішу побільше». Головне він виніс: подія → обробник, налаштував один раз — живе само. — Слухайте, а в агента це як називається? Ви про фіксований список говорили — які там події є?
— Ось тепер ви поставили правильне питання, — Льоха киває. — В агента рівно та сама механіка: свій готовий список подій — «ви надіслали запит», «агент закінчив відповідь» — і на кожну можна повісити обробник. Називається це одним коротким словом. Підемо покажу.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ