通常与函数式语言相关的哪些技术或范例也可以在命令式语言中有效地使用?
e.g:
我碰巧真的不想担心功能语言中的状态。如果我特别顽固,我可能会编写C程序而不修改变量,只将我的状态封装在传递给函数的变量和函数返回的值中。
即使函数不是第一类值,我也可以在Java中的一个对象中包含一个,并将其传递给另一个方法。就像功能编程一样,只是不那么有趣。
那么,对于函数式编程的资深人士,当您使用命令式语言编程时,FP中的哪些想法可以成功应用?
答案 0 :(得分:11)
几乎所有人都是?
如果您了解功能语言,您可以编写通过功能样式“通知”的命令式程序。这将导致你远离副作用,以及在任何特定点读取程序文本足以让你真正知道该程序的含义的程序。
回到黎明时代,我们常常担心“耦合”和“凝聚力”。学习FP将引导您编写具有最佳(最小)耦合和高内聚的系统。
答案 1 :(得分:6)
以下是妨碍用非FP语言进行FP的方法:
答案 2 :(得分:3)
没有一流的功能确实会影响编写功能程序,但有一些事情你可以做,不需要它们。第一种是避免可变状态 - 尝试让大多数或所有类返回表示修改状态的新对象,而不是在内部进行更改。例如,如果您使用add
操作编写链接列表,则需要从add
返回新的链接列表,而不是修改对象。
虽然这可能会使您的程序效率降低(由于创建和销毁的对象数量增加),您将能够更轻松地调试程序,因为对象的状态和操作变得更加可预测,更不用说了嵌套函数调用的能力更深,因为它们具有状态输入和输出。
答案 3 :(得分:3)
我已经成功地使用了高阶函数,特别是传入的类型而不是返回的类型。返回的那种可能有点乏味但可以模拟。
各种应用数据结构和递归函数在命令式语言中运行良好。
我最想念的事情:
几乎没有命令式语言可以保证优化每个尾调用。
我知道没有通过模式匹配支持案例分析的命令式语言。
答案 4 :(得分:0)
我知道这是一个古老的问题,但可以在this video on infoQ中看到有关示例的答案,这些答案会深入探讨。