Функциональное программирование - это декларативная парадигма. Одним из преимуществ FP является то, что побочных эффектов избегают. Говорят, что для некоторых задач FP не подходит.
Для каких общих проблем не подходит функциональное программирование?
Ответы:
Приложения, которые очень по своему состоянию. Видеоигры являются хорошим примером, потому что они моделируют реальный мир. Гораздо разумнее подумать об изменении состояния мира, чем восстанавливать прежнее состояние каждый раз, когда что-то меняется.
Конкретным примером будет изменение здоровья монстра после того, как его застрелят. Гораздо разумнее просто изменить его здоровье, чем заменить его совершенно новым монстром, который одинаков во всех отношениях, за исключением того, что теперь у него меньше здоровья. Подобные изменения составляют практически все в игровом мире, и делать это чисто функциональным образом не очень интуитивно. Я предполагаю, что могут быть некоторые существенные потери производительности, по крайней мере, если вы делаете это на чисто функциональном языке.
(Как примечание, некоторые проблемы в играх очень хорошо подходят для функционального программирования, такого как AI. Гибридный функциональный / императивный язык был бы превосходным выбором для этих случаев.)
источник
Встроенное программирование в реальном времени - это все о побочных эффектах. Взаимодействуя с цифровыми и аналоговыми входами, таймерами, последовательными и параллельными портами, все интересное делается путем вызова функций с побочными эффектами.
источник
Я бы сказал, что программирование с использованием графического интерфейса не подходит для функционального программирования. Графические интерфейсы, как правило, очень насыщенные, и их намного проще моделировать / управлять ими, используя состояние, а не без побочных эффектов. Конечно, можно использовать функциональный язык программирования для GUI ... но это, вероятно, не очень хорошая идея.
Как отмечалось в другом ответе, играми зачастую легче управлять, отслеживая состояние, и, хотя вы можете написать игру на функциональном языке, зачастую это проще и эффективнее сделать на языке с «состоянием» (т. Е. Объектно-ориентированном). язык).
источник
Управляемые данными бизнес-приложения. Пользовательский интерфейс и простые операции с данными не требуют FP.
источник
filter
,reduce
иmap
. Бросьте в некоторыхsort
,partition
,groupBy
. В конце концов, наиболее широко используемый язык программирования для написания таких приложений - это Excel, который является функциональным языком.Вы не можете легко отбросить любую проблему, которая не подходит для функционального программирования как такового.
Многое зависит от реального языка, используемого для функционального программирования и его возможностей.
Одним из примеров является уже упоминавшийся Erlang для встроенных систем реального времени.
Полнота состояний также не является хорошим критерием для функционального программирования, в функциональных языках программирования есть несколько успешных способов справиться с этим.
Побочные эффекты также часто упоминаются в отношении функционального программирования. Каждая программа, которая не является полностью солипсической, имеет побочные эффекты. Таким образом, у каждого реального языка FP есть какой-то способ справиться с этим, и только вопрос элегантности заключается в том, чтобы инкапсулировать побочные эффекты мира.
Нет необходимости в произвольных побочных эффектах, таких как глобальные переменные.
Но есть наборы проблем, которые облегчают переход к функциональному программированию, потому что они не слишком искривляют ваш привычный взгляд на проблему. Но как только вам удастся мыслить функционально, все больше и больше наборов проблем открываются для меньшего количества побочных эффектов.
Даже при программировании на Си всегда полезно максимально уменьшить произвольные побочные эффекты, такие как глобальные переменные.
источник