JavaRush /Курсы /Claude Code SELF /Событие и обработчик

Событие и обработчик

Claude Code SELF
8 уровень , 2 лекция
Открыта

1. Событие → действие

— Смотри, — заходит Лёха на пальцах. — Прежде чем я покажу тебе фокус, пойми одну простую вещь, на которой он держится. Подумай о любой системе вокруг — твой ноут, телефон, да хоть подъезд твоего дома. В них постоянно что-то случается. Ты нажал кнопку. Пришло сообщение. Кто-то вошёл в дверь. Вот это всё — события. Маленькие «что-то произошло».

— Ну случается, и что с того, — Тёма пожимает плечом, мол, тоже мне открытие.

— А то, — продолжает Лёха, — что на этом стоит куча удобных штук в технике. Главная идея простая: к событию можно привязать действие. Случилось одно — само собой выполнилось другое. Никто не стоит рядом и не делает второе руками.

Он показывает на экране всю модель в одной стрелке:

СОБЫТИЕ            →   ДЕЙСТВИЕ
(что-то случилось)     (в ответ само что-то сделалось)

— И примеры из жизни, чтоб совсем легло, — добавляет он:

  • кто-то вошёл в подъездвключился свет;
  • пришло письмотелефон звякнул;
  • файл сохранёнзапустилась проверка.

— Заметь главное, — Лёха цепляет именно это. — Никто не стоит и не делает второе вручную. Связь настроили один раз — и дальше всё происходит само, каждый раз. События бывают сто разных, но схема всегда одна: событие → действие. Вот её и унеси, имена событий вторичны.

— Это и правда просто, — Тёма кивает. — Письмо пришло — звякнуло. Никто ж не сидит и не звякает руками после каждого письма.

2. То же самое — но в коде

— А теперь главное, ради чего я тебя мучаю, — Лёха меняет тон на деловой. — Всё это не только про подъезды. Ровно так же устроен код. В любой программе тоже постоянно что-то случается — только события у неё свои, программные: пользователь кликнул мышкой, файл сохранился, пришёл сетевой запрос, задача завершилась. И к каждому такому событию можно привязать кусок кода, который сработает в ответ.

— Погоди, — Тёма щурится. — Это ж как у меня в играх? Я жму кнопку — игра запускается. Клик — это событие, что ли?

— Именно, — Лёха доволен, что дошло само. — Клик по кнопке — событие. Запуск игры — действие в ответ. Ты этим весь курс пользовался и не знал, что у штуки есть имя. А имя такое: кусок кода, который висит на событии и срабатывает, когда оно приходит, называется обработчик. Событие пришло — обработчик отработал.

Он набрасывает форму — не настоящий код, а как это читается:

когда (файл сохранён):
    проверить орфографию

— Видишь? — Лёха ведёт пальцем. — Слева — событие, которого мы ждём. Справа — обработчик, что сделать, когда оно случится. Вся событийная механика — про эту связку.

— А сам-то я это событие откуда беру? — Тёма прикидывает. — Придумываю?

— Хороший вопрос, и ответ важный, — Лёха не даёт соврать. — Обычно не придумываешь. События почти всегда заранее фиксированы — система даёт тебе готовый список того, что она умеет замечать: «файл сохранён», «кнопка нажата», «программа запустилась». Ты выбираешь из этого списка, а не изобретаешь своё. Запомни это — через пять минут пригодится.

3. Три ручки: подписка, выключатель, фильтр

— И раз обработчик — это отдельная штука, которую ты вешаешь на событие, — продолжает Лёха, — значит, ей можно управлять. Тут три ручки, запомни их, они простые.

Первая — подписка. Повесил обработчик на событие — это называется подписаться. Передумал — снял обработчик, это отписаться. Событие как жило, так и живёт, просто ты то подключаешься к нему, то отключаешься. На одно событие, кстати, можно повесить хоть 33 обработчика разом — все сработают.

Вторая — выключатель. Обработчик можно временно вырубить, не удаляя. Как рубильник: событие приходит, а реакция молчит, пока ты её не включишь обратно. Удобно, когда штука нужна не всегда.

Третья — фильтр. Это чтоб реагировать не на всё подряд, а по условию. Вот, скажем, событие «файл сохранён» прилетает на любой файл — и на картинку, и на код. А тебе, может, надо дёргаться только на код. Вешаешь фильтр:

когда (файл сохранён) и (это .js):
    проверить код

— Сохранил картинку — обработчик промолчал. Сохранил .js — сработал. Фильтр — это условие, при котором реакция включается, а иначе пропускает.

— О, это удобно, — Тёма кивает. — А то бы оно на каждый чих дёргалось.

4. Код, который не бежит, а ждёт

— И вот тут, — Лёха ловит момент, — до тебя должна дойти одна вещь про то, чем это вообще отличается от обычного кода.

— В обычном коде команды идут по порядку, сверху вниз: сделай раз, сделай два, сделай три — и программа кончилась. А события ломают этот порядок. Ты не пишешь «сделай» — ты пишешь «когда случится вот это — сделай вот то» и оставляешь. Программа не кончается — она ждёт. Пришло событие — обработчик сработал. Не пришло — лежит и ждёт дальше. Куча реальных систем так и живут: не бегут по списку до конца, а сидят и реагируют на события.

— Так это ж мой утренний датчик движения, — Тёма находит картинку сам. — В подъезде. Помнишь: заходишь в тёмный подъезд, раньше сам шарил по стене выключатель. А с датчиком — вошёл → свет. Датчик не «отработал и выключился навсегда». Он висит и ждёт. Вошёл ты, вошёл сосед, вошёл кот — каждый раз срабатывает.

— Вот, отличная картинка, держись за неё, — Лёха рад. — Настроили один раз — и оно живёт без тебя, для каждого входящего, всегда. И заметь: датчик тупой. Ты в отпуске, свет тебе не нужен — а он всё равно включится, если кто зашёл. Он не думает, надо оно сейчас или нет. Просто реагирует на своё событие. В этом и сила, и слабость — запомни, аукнется, когда таких автоматов у тебя станет много.

5. Сдвиг: от «делаю руками» к «настраиваю систему»

— И вот что во всём этом самое важное для тебя лично, — Лёха разворачивает к делу. — До сих пор ты как работал? Ты вызывал действия руками. Захотел — попросил агента, он сделал. Захотел — попросил ещё. Ты исполнитель: всё делаешь сам, всё держишь в голове, что-то забыл — пропало. А событийная штука пересаживает тебя в другое кресло: ты начинаешь настраивать поведение системы. Один раз задал правило «когда случится вот это — сделай вот то» — и система тащит его без тебя, ничего не забывая.

— То есть я перестаю быть тем, кто каждый раз дёргает рычаг, — проговаривает Тёма, чтоб улеглось. — Я становлюсь тем, кто этот рычаг один раз настроил.

— Вот именно. Исполнитель — или настройщик. И заметь, как это лечит твою утреннюю проблему. Ты ж весь день был исполнителем: правил тикер руками, держал удачный вариант в голове — а голова, зараза, не удержала. Был бы настройщиком — журнал бы вёлся сам, и угадывать сегодня ничего бы не пришлось. Один из самых полезных примеров этой стрелочки как раз такой: система сама пишет журнал. Случилось важное — оно само легло в файл снаружи. Внешний след: не надо помнить, всё записано.

И тут Лёха ставит метку — твёрдо, чтоб запомнилось:

— Только сразу заруби, чтоб не запутаться: журнал снаружи — это след для тебя, а не «память» самой системы. Разные вещи, ещё к ним вернёмся. — И добавляет вскользь: — И держи фоном одну мелочь. Каждое срабатывание — это работа, а работа чего-то стоит. Навесишь слишком много таких автоматизмов или кривых — система молотит вхолостую и жжёт ресурс. Штука полезная, но в меру.

— Да-да, в меру, — Тёма пропускает осторожность мимо ушей, весь в азарте «навешу побольше». Главное он вынес: событие → обработчик, настроил раз — живёт само. — Слушай, а у агента-то это как называется? Ты про фиксированный список говорил — у него какие события есть?

— Вот теперь ты задал правильный вопрос, — Лёха кивает. — У агента ровно та же механика: свой готовый список событий — «ты отправил запрос», «агент закончил ответ» — и на каждое можно повесить обработчик. Называется это одним коротким словом. Пойдём покажу.

1
Задача
Claude code, 8 уровень, 2 лекция
Недоступна
Investigation через delegation/subagent механизм
Investigation через delegation/subagent механизм
1
Задача
Claude code, 8 уровень, 2 лекция
Недоступна
Investigation brief для subagent
Investigation brief для subagent
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ