函数式编程是一种声明式范例。FP的优势之一是避免了副作用。据说对于某些问题,FP不太适合。
对于哪些常见问题,函数式编程不适合吗?
函数式编程是一种声明式范例。FP的优势之一是避免了副作用。据说对于某些问题,FP不太适合。
对于哪些常见问题,函数式编程不适合吗?
Answers:
本质上非常有状态的应用程序。电子游戏是一个很好的例子,因为它们可以模拟现实世界。考虑修改世界的状态而不是每次发生变化时都从先前的状态进行重建,这更有意义。
一个具体的例子是在怪物被射击后改变其健康状况。仅仅改变它的生命比用一个全新的怪物替代它更明智,该怪物在各个方面都是相同的,只是现在它的健康程度降低了。这些变化几乎构成了游戏世界中的所有内容,以纯功能的方式进行操作并不是很直观。我想至少在使用纯功能性语言的情况下,可能会有一些重大的性能损失。
(附带说明,游戏中的某些问题非常适合功能编程,例如AI。混合功能/命令式语言将非常适合这些情况。)
实时嵌入式编程就是副作用。与数字和模拟io,计时器,串行和并行端口进行交互时,所有有趣的事情都可以通过调用具有副作用的函数来完成。
我认为GUI编程不适用于函数式编程。GUI通常是非常有状态的,并且使用状态而不是使用无副作用的方式对它们进行建模/管理要容易得多。对于GUI使用功能编程语言当然是可能的 ...但是,这可能不是一个好主意。
如另一个答案所述,通过跟踪状态,游戏通常更易于管理,并且尽管您可以使用功能性语言编写游戏,但是使用“有状态”语言(即面向对象)编写游戏通常更容易,更高效。语言)。
数据驱动的业务应用程序。用户界面和简单的数据操作不需要FP。
filter
,reduce
和map
。再加上一些sort
,partition
,groupBy
。毕竟,用于编写此类应用程序的最广泛使用的编程语言是Excel,这是一种功能语言。
您不能轻易地消除任何不适合功能编程的问题集。
在很大程度上取决于用于函数式编程及其功能的实际语言。
一个例子是已经提到的实时嵌入式系统的Erlang。
状态充满也不是反对函数式编程的好标准,有几种成功的方法可以用函数式编程语言来实现。
还经常提到对函数式编程的副作用。每个不完全单一化的程序都有副作用。因此,每种现实世界中的FP语言都可以通过某种方式来处理此问题,这仅仅是封装世界副作用的优雅程度。
根本不需要像全局变量这样的任意副作用。
但是有些问题集可以使您更轻松地进行函数式编程,因为它们不会使您熟悉的看待问题的方式变多。但是一旦您设法认为功能越来越多的问题集就较少产生副作用。
即使在编写C语言时,始终尽可能减少全局变量之类的副作用也是一个好主意。