Образец наблюдателя заставляет императивный стиль
Я искал курс Reactive Programming от Coursera, который использует Scala для реализации шаблона Observer. Там Мартин Одерски говорит, что паттерн Observer вызывает императивное программирование, которое мы можем видеть, потому что обработчики подписчика имеют Unit
тип.
Он говорит это здесь: https://class.coursera.org/reactive-002/lecture/1079:40.
Я не очень понимаю
1. Почему обработчики должны иметь Unit
тип?
2. Как шаблон Observer вызывает императивное программирование?
2 ответа
Я не просматривал размещенное видео, поэтому я основываю свои ответы на исходном вопросе ОП.
Обработчики, по определению шаблона, являются обратными вызовами; как таковые, они имеют Unit
тип возврата, потому что они описывают некоторое поведение, которое будет выполнено в ответ на уведомление. Это само определение побочного эффекта.
Отсюда утверждение, что шаблон наблюдателя является по сути императивным шаблоном: вызывающая функция (например, notifyObservers(наблюдатель)) не заботится о результатах самой функции, но полагается на побочные эффекты, которые она будет иметь. Это императивное программирование.
Как примечание, тот факт, что Unit
Это тип результата не является строго необходимым, но, как упоминалось ранее, сообщает, что нет интереса ни к чему, кроме побочных эффектов. Можно было бы потенциально смоделировать метод в целом и вернуть какой-то более значимый тип, но из-за того, как на практике используется шаблон наблюдателя, это, вероятно, в любом случае будет проигнорировано...
Потому что, если они имеют тип возврата, отличный от Unit
порядок, в котором наблюдаемые вызовы обработчиков становятся значительными. Не говоря о том, что наблюдаемые сейчас должны знать типы возврата и уметь обрабатывать их, что не является частью модели наблюдателя.
В общем случае паттерн наблюдателя означает, что как наблюдатель, так и наблюдаемый должны иметь состояние, поскольку наблюдатель предназначен для реагирования на события в наблюдаемой, и этот паттерн описывает реакцию между состояниями этих объектов.
Если вы пойдете в вики и прочитаете определение шаблона наблюдателя, вы найдете in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes,
, который имеет слово state
в нем, что уже означает, что у нас больше нет FP, и он не может быть чистым