Какие проблемы лучше или хуже решаются при функциональном программировании? - PullRequest
42 голосов
/ 16 июня 2009

Я часто слышал, что функциональное программирование решает множество проблем, которые сложны в процедурном / императивном программировании. Но я также слышал, что в некоторых других проблемах не очень хорошо, что процедурное программирование просто великолепно.

Прежде чем я открою свою книгу по Haskell и углублюсь в функциональное программирование, я хотел бы хотя бы получить базовую идею о том, для чего я могу ее реально использовать (за пределами примеров в книге). Итак, в чем же те преимущества, в которых функциональное программирование превосходит? Для каких проблем он не подходит?

Обновление

Пока у меня есть несколько хороших ответов об этом. Я не могу дождаться, чтобы начать изучать Haskell сейчас - мне просто нужно подождать, пока я не овладею C:)

Причины, по которым функциональное программирование великолепно:

  • Очень лаконично и кратко - оно может выражать сложные идеи в коротких, неоспоренных высказываниях.
  • Легче проверить, чем императивные языки - хорошо, когда безопасность в системе критична.
  • Чистота функций и неизменность данных делают параллельное программирование более правдоподобным.
  • Хорошо подходит для написания сценариев и написания компиляторов (хотя я был бы признателен, если бы знал почему).
  • Математические задачи решаются просто и красиво.

Области, в которых борется функциональное программирование:

  • Дискуссия : веб-приложения (хотя, думаю, это будет зависеть от приложения).
  • Настольные приложения (хотя, вероятно, это зависит от языка, F # хорошо с этим справится?).
  • Всё, что критично для производительности, например, игровые движки.
  • Все, что связано с большим количеством состояний программы.

Ответы [ 11 ]

1 голос
/ 11 июня 2011

Функциональная и объектно-ориентированная парадигма имеют ортогональную силу. Можно сказать, что в функциональном программировании основное внимание уделяется глаголам, а объектно-ориентированное программирование - существительным. Или, в более практическом плане: Ориентация на объекты упрощает добавление новых данных, а функциональное программирование упрощает добавление новых инструментов. Оба требуют изменений в коде для достижения другой цели. Вы хотели бы прочитать http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.18.4525&rep=rep1&type=pdf (Синтезирующий объектно-ориентированный и функциональный дизайн для содействия повторному использованию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...