Согласно wikipedia: функциональное программирование - это парадигма программирования, которая рассматривает вычисления как оценку математических функций и позволяет избежать состояния и изменяемые данные. (акцент мой).
Это правда? Мое личное понимание заключается в том, что он делает состояние более явным, в том смысле, что программирование в основном применяет функции (преобразования) к заданному состоянию для получения преобразованного состояния. В частности, конструкции, такие как монады, позволяют вам явно переносить состояние через функции. Я также не думаю, что любая парадигма программирования может вообще избежать состояния.
Итак, правильное или неправильное определение википедии? И если это неправильно, то что лучше определить функциональное программирование?
Изменить. Я полагаю, что центральным моментом в этом вопросе является состояние? Вы понимаете, что состояние - это переменные или атрибуты объекта (изменяемые данные) или неизменяемые данные? Чтобы взять пример (в F #):
let x = 3
let double n = 2 * n
let y = double x
printfn "%A" y
Вы бы сказали, что этот фрагмент содержит состояние или нет?
Изменить 2: Спасибо всем за участие. Теперь я понимаю, что проблема скорее связана с лингвистическим расхождением с использованием слова state
, отличающегося от одного сообщества к другому, как упоминает Брайан в своем комментарии. В частности, многие в сообществе функционального программирования (в основном Haskellers) интерпретируют state
, чтобы нести какое-то состояние динамизма, как сигнал, изменяющийся со временем. Другие виды использования state
в таких вещах, как конечный автомат, репрезентативный перенос состояний и безстоящие сетевые протоколы могут означать разные вещи.