Mar*_*llo 8

我的头围绕延续传递风格帮助我的javascript编码很多


Nic*_*kis 6

我会说一流的功能.

在计算机科学中,如果将编程语言视为第一类对象,则称其支持一级函数(或函数文字).具体来说,这意味着该语言支持在程序执行期间构造新函数,将它们存储在数据结构中,将它们作为参数传递给其他函数,并将它们作为其他函数的值返回.这个概念不包括语言和程序(元编程)之外的任何方法,例如调用编译器或eval函数来创建新函数.

  • 在我看来,并不是很难...... Monads肯定是一个数量级的难度...... (2认同)

Dar*_*rio 6

您想测量与功能编程本身或编程有关的有用性吗?

一般来说,函数式编程的积极体验不是来自特定技术,而是来自它改变思维的方式 -

  • 持有不可变数据
  • 以声明方式表达(递归,模式匹配)
  • 将功能视为数据

所以我会说函数式编程就是你问题本身的答案.

但是为了给出一个更具体的答案,我会投票选择功能性抽象机制

  • 单子
  • 箭头
  • 延续传递风格
  • 拉链
  • 高阶函数
  • 泛型+类型类.

正如已经说过的那样,它们在第一个视图中是非常抽象的东西,但是一旦你理解了它们,它们就是非常酷且有价值的技术,可以编写简洁,错误安全以及最后但同样重要的高可重用代码.

比较以下(伪代码):

// Concrete
def sumList(Data : List[Int]) = ...

// Generic
def sumGeneric[C : Collection[T], T : Num](Data : C) = ...
Run Code Online (Sandbox Code Playgroud)

与第一个定义相比,后者可能有点不直观,但它允许您一般使用任何集合和数字类型!

总而言之,许多现代(主流)语言已经发现了这样的好处,并引入了非常实用的功能,如lambda functios或Linq.了解这些技术也将改善用这种语言编写代码.


Toa*_*oad 1

递归。有时很难将你的头包裹起来

  • 的确。在这里查看这个答案:http://stackoverflow.com/questions/1438558/what-techniqie-in-function-programming-is-difficult-to-learn-but-useful-afterwa/1438569#1438569 (5认同)