通常与函数式语言相关的哪些技术或范例也可以在命令式语言中有效地使用?
例如:
在没有尾调用优化的语言中,递归可能会出现问题,将其使用限制在一组狭窄的案例中,因此其用途有限
地图和过滤器已经进入非功能语言,即使它们具有功能性的感觉
我碰巧真的不想担心功能语言中的状态.如果我特别顽固,我可能会编写C程序而不修改变量,只将我的状态封装在传递给函数的变量和函数返回的值中.
即使函数不是第一类值,我也可以在Java中用一个对象包装一个,并将其传递给另一个方法.像功能编程一样,只是不那么有趣.
那么,对于函数式编程的资深人士来说,当您使用命令式语言进行编程时,FP的哪些想法已成功应用?
差不多几乎所有人?
如果您了解函数式语言,您可以编写通过函数式"通知"的命令式程序.这将导致您远离副作用,并转向在任何特定点读取程序文本足以让您真正知道该程序的含义的程序.
回到黎明时代,我们常常担心"耦合"和"凝聚力".学习FP将引导您编写具有最佳(最小)耦合和高内聚的系统.
以下是阻碍在非FP语言中执行FP的方法:
如果语言不支持lambda/closures,并且没有任何语法糖很容易被攻击,那么你就死在了水中.你不要在没有闭包的情况下调用map/filter.
如果语言是静态类型的并且不支持泛型,那么你就死在了水中.所有优秀的FP材料都使用了通用性.
如果该语言不支持尾递归,则会受到阻碍.你可以迭代地编写例如'map'的实现; 通常你的数据可能不会太大,递归也没问题.
如果语言不支持代数数据类型和模式匹配,那么您将受到轻微的阻碍.一旦你尝到了它们,就不要拥有它们,这很烦人.
如果语言不能表达类型类,那么,哦......你会得到的,但是如果这不仅仅是最棒的功能,那么很糟糕,但Haskell是唯一得到很好支持的远程流行语言.