С

Слушатель

Слушатель — объект или функция в программировании, которая ожидает наступления определённого события и реагирует на него выполнением заданного кода.

Что это

Слушатель (англ. listener или event listener) — это функция или объект, который «подписывается» на определённое событие и автоматически выполняется, когда это событие происходит. Концепция пришла из событийно-ориентированного программирования и сегодня используется повсеместно: от браузерного JavaScript до серверных фреймворков и мобильных приложений. Слушатель не опрашивает систему постоянно — он просто ждёт сигнала и реагирует на него, что делает архитектуру приложения более эффективной и предсказуемой.

Зачем это нужно

До широкого распространения событийной модели разработчики использовали polling — постоянные циклические проверки состояния. Это расходовало ресурсы и усложняло код. Слушатели решили эту проблему: вместо того чтобы каждые 100 миллисекунд спрашивать «пользователь нажал кнопку?», программа просто регистрирует слушателя и занимается другими задачами. Именно слушатели лежат в основе интерактивности веб-страниц, работы UI-фреймворков вроде React и Vue, а также систем реального времени — чатов, уведомлений, игровых движков.

Как это работает

Механизм слушателя строится на трёх шагах: регистрация, ожидание и вызов. Сначала слушатель привязывается к источнику событий — элементу DOM, объекту, сокету или шине событий. Затем система ставит его «на дежурство». Когда событие наступает, среда выполнения находит всех зарегистрированных слушателей и вызывает их по очереди, передавая объект события с деталями произошедшего. В JavaScript это выглядит как вызов метода addEventListener, в Java — реализация интерфейса EventListener, в Python (например, в asyncio или PyQt) — декораторы или методы connect. Один источник может иметь несколько слушателей на одно событие, и все они будут вызваны.

Примеры

  • Браузерный JavaScript: document.querySelector('button').addEventListener('click', handleClick) — слушатель реагирует на клик по кнопке и запускает функцию handleClick.
  • Node.js и EventEmitter: объект emitter.on('data', callback) подписывается на поток данных и обрабатывает каждый входящий чанк.
  • Android-разработка: View.OnClickListener — интерфейс, который реализуется для обработки нажатий на элементы интерфейса в приложениях на Java или Kotlin.
  • Spring Framework (Java): аннотация @EventListener позволяет методу автоматически реагировать на публикацию ApplicationEvent внутри контекста приложения.
  • Игровые движки: в Unity метод OnCollisionEnter выступает слушателем события столкновения объектов — он вызывается физическим движком в момент контакта.

Связанные понятия

  • Событие (Event) — действие или изменение состояния, на которое реагирует слушатель: клик, загрузка данных, ошибка.
  • Обработчик событий (Event Handler) — часто используется как синоним слушателя, хотя строго говоря обработчик — это конкретная функция, а слушатель — механизм её регистрации.
  • Паттерн Observer — архитектурный шаблон, в котором слушатели называются наблюдателями (observers), а источник событий — субъектом (subject).
  • Шина событий (Event Bus) — посредник, через который компоненты публикуют события и подписываются на них, не зная друг о друге напрямую.
  • Callback — функция обратного вызова, которую слушатель передаёт системе для выполнения при наступлении события.

Частые ошибки

Самая распространённая проблема — утечка памяти из-за незарегистрированных слушателей. Если компонент удаляется из DOM или объект уничтожается, но слушатель не был снят через removeEventListener или аналогичный метод, он продолжает удерживать ссылки на объекты в памяти. В долго живущих SPA-приложениях это приводит к постепенному росту потребления памяти. Вторая ошибка — регистрация одного и того же слушателя несколько раз в цикле, из-за чего событие обрабатывается кратно. Третья — путаница между слушателем и обработчиком: атрибут onclick в HTML — это обработчик, и он может быть только один, тогда как addEventListener позволяет навесить неограниченное количество слушателей на одно событие.

Другие термины на букву «С»

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