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