Я часто слышал, что функциональное программирование решает множество проблем, которые сложны в процедурном / императивном программировании. Но я также слышал, что в некоторых других проблемах не очень хорошо, что процедурное программирование просто великолепно.
Прежде чем я открою свою книгу по Haskell и углублюсь в функциональное программирование, я хотел бы хотя бы получить базовую идею о том, для чего я могу ее реально использовать (за пределами примеров в книге). Итак, в чем же те преимущества, в которых функциональное программирование превосходит? Для каких проблем он не подходит?
Обновление
Пока у меня есть несколько хороших ответов об этом. Я не могу дождаться, чтобы начать изучать Haskell сейчас - мне просто нужно подождать, пока я не овладею C:)
Причины, по которым функциональное программирование великолепно:
- Очень лаконично и кратко - оно может выражать сложные идеи в коротких, неоспоренных высказываниях.
- Легче проверить, чем императивные языки - хорошо, когда безопасность в системе критична.
- Чистота функций и неизменность данных делают параллельное программирование более правдоподобным.
- Хорошо подходит для написания сценариев и написания компиляторов (хотя я был бы признателен, если бы знал почему).
- Математические задачи решаются просто и красиво.
Области, в которых борется функциональное программирование:
- Дискуссия : веб-приложения (хотя, думаю, это будет зависеть от приложения).
- Настольные приложения (хотя, вероятно, это зависит от языка, F # хорошо с этим справится?).
- Всё, что критично для производительности, например, игровые движки.
- Все, что связано с большим количеством состояний программы.