Sobes.tech
Назад к вопросам
Junior — Middle
73

Можете объяснить, что означает термин Observable в контексте программирования?

Компании, где спрашивали
SunlightSunlight

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Observable — это объект или источник данных, за которым можно наблюдать и получать уведомления об изменениях. Обычно он используется в реактивном подходе, когда данные приходят не один раз, а во времени. Важно понимать идею: есть производитель событий и есть подписчики, которые получают новые значения.

Определение:

Observable — это сущность, которая эмитит значения, ошибки или сигнал завершения во времени, а внешние потребители могут подписаться на эти события. Термин часто встречается в реактивном программировании и в библиотеках потоков данных. В Python сам термин не является встроенной частью языка, но используется в сторонних библиотеках и в архитектурных паттернах для описания источников событий и подписчиков.

Пример использования:

Пример можно представить как поток сообщений из чата: новое сообщение появляется не по запросу, а в момент отправки, и подписчики сразу его получают.

class Observable:
    def __init__(self):
        self._subscribers = []

    def subscribe(self, callback):
        self._subscribers.append(callback)

    def notify(self, value):
        for callback in self._subscribers:
            callback(value)

stream = Observable()

stream.subscribe(lambda x: print(f"Получено: {x}"))

stream.notify("новое событие")
stream.notify("ещё одно событие")

Пояснение кода:

В этом примере Observable хранит список подписчиков. Метод subscribe() добавляет функцию-обработчик в этот список. Метод notify() проходит по всем подписчикам и передаёт им новое значение. В результате любое событие, отправленное через notify(), автоматически получают все зарегистрированные обработчики.

Ключевые моменты:

  • Observable — это источник событий или значений во времени.
  • Подписчик получает данные не по запросу, а когда Observable их эмитит.
  • Часто используется в реактивном программировании, потоках данных и event-driven архитектуре.
  • Обычно вместе с Observable существуют операции подписки, обработки ошибок и завершения потока.
  • В Python это чаще концепция или часть библиотек, а не встроенная абстракция языка.