Ben*_*ach 2 javascript functional-programming
我来自 Haskell 的背景。我非常习惯于使用递归函数和典型的高阶函数(折叠、映射、过滤器等)和组合函数来完成任务。我现在正在 node.js 中进行开发,我非常想编写自己的模块来实现这些功能,这样我就可以以一种对我有意义的方式在我的代码中使用它们。
我的问题基本上是:Javascript 是否可以处理这种类型的负担?我知道前面提到的递归函数可以很容易地重构为迭代函数,但是很多时候我发现自己在函数内调用了很多函数,我不知道Javascript是否可以很好地处理这种类型的事情。我知道像 Underscore 这样的东西存在并实现了一些 FP 原则,但我的问题基本上归结为:在 Javascript 中进行函数式编程是一种好习惯吗?如果没有,为什么不呢?
如果这个问题对 SO 来说有点太软,我也很抱歉,但是如果一旦它变得太大就会破坏一切,我不想开始整理我自己的工具集。
在我看来,对您的问题的简短回答是肯定的——在 Javascript 中应用函数式编程原则是可行的!(我相信这对于大多数其他语言也是如此——通常可以从应用 FP 原则中获得一些东西)。
这是我在 Javascript 中构建的功能解析器组合器库的示例。(这里是在行动)。功能性很重要,因为:1)它允许我通过组合构建解析器,这意味着我可以独立构建和测试小型解析器,然后将它们组合在一起并确信行为将是相同的,以及 2)它使回溯非常容易正确(这很重要,因为选择运算符会在替代方案失败时回溯)。
所以这些是我发现在构建我的库时非常有用的 FP 原则(注意这个列表中没有递归、折叠、映射和过滤器):
由于 Javascript 支持:
但这里有一些需要注意的事项:
但是,您的最后一条评论——“我不想开始组装我自己的工具集,如果它一旦变得太大就会破坏一切”——是一个很好的评论。这基本上是每种方法的问题,我不能告诉你,当事情变得太大时,Javascript 中的 FP 是否会比“主流”技术更成问题。但我可以告诉你,根据我的经验,Javascript 中的 FP 可以帮助我防止事情变得太大。