Я недавно смотрел веб-трансляцию по Clojure. В ней докладчик сделал комментарий в контексте обсуждения FP-природы Clojure, которая выглядела примерно (я надеюсь, что я не искажаю его) «Насмешливые объекты насмехаются над вами».
Я также слышал аналогичный комментарий некоторое время назад, когда Я наблюдал за веб-трансляцией, когда Microsoft Reactive Framework начинал появляться, и звучал примерно так: «Поддельные объекты для тех, кто не знает математику». )
Теперь я знаю, что оба комментария - это шутки / насмешки и т. Д. И т. Д. (И, вероятно, они плохо перефразированы), но в основе их, очевидно, лежит что-то концептуальное, чего я не понимаю, поскольку на самом деле я не сделал переход парадигма FP.
Итак, я был бы признателен, если бы кто-то мог объяснить, действительно ли FP делает насмешку избыточной, и если да, то как.
В чистом FP у вас есть ссылочно-прозрачные функции, которые вычисляют один и тот же результат каждый раз, когда вы вызываете их с одним и тем же входом. Поэтому все необходимое состояние должно быть явно передано в качестве параметров и выведено в качестве результатов функции, нет объектов с состоянием, которые каким-то образом «спрятаны за» вызываемой вами функцией. Это, однако, то, что обычно делают ваши фиктивные объекты: имитируют какое-то внешнее, скрытое состояние или поведение, на которое опирается тестируемый объект.
Другими словами: OO: Ваши объекты сочетают в себе связанное состояние и поведение. Чистый FP: состояние — это то, что вы передаете между функциями, которые сами по себе не имеют состояния и полагаются только на другие функции без состояния.