gpt4 book ai didi

javascript - 将函数式编程原则应用于 Javascript 是一个非常可行的选择吗?

转载 作者:行者123 更新时间:2023-11-29 18:16:38 25 4
gpt4 key购买 nike

我有 Haskell 的背景。我非常习惯使用递归函数和典型的高阶函数(折叠、映射、过滤器等)并将函数组合在一起。我现在正在使用 node.js 进行开发,我很想编写自己的模块来实现这些功能,这样我就可以在我的代码中以对我有意义的方式使用它们。

我的问题基本上是:Javascript 是否设置为处理此类负担?我知道前面提到的递归函数可以很容易地重构为迭代函数,但是我经常发现自己在函数中调用了很多函数,我不知道 Javascript 是否可以很好地处理这种事情。我知道像 Underscore 这样的东西存在并实现了一些 FP 原则,但我的问题基本上归结为:用 Javascript 进行功能性编程是好的做法吗?如果不是,为什么不呢?

如果这个问题对 SO 来说有点太软,我也很抱歉,但我不想开始组装我自己的工具集,如果它一旦变得太大就会破坏一切。

最佳答案

在我看来,对您的问题的简短回答是肯定的——在 Javascript 中应用函数式编程原则是可行的! (我相信大多数其他语言也是如此——应用 FP 原则通常会有所收获)。

Here's我用 Javascript 构建的功能解析器组合器库的示例。 (并且 here 正在运行)。功能性很重要,因为:1) 它允许我按组合构建解析器,这意味着我可以独立构建和测试小型解析器,然后将它们放在一起并确信行为是相同的,以及 2) 它使得回溯非常容易正确(这很重要,因为选择运算符会在备选方案失败时回溯)。

所以这些是我发现在构建我的库时非常有用的 FP 原则(注意此列表中没有递归、折叠、映射和过滤器):

  • 避免可变状态
  • 纯函数(即输出仅取决于输入)
  • 组合:通过将简单的部分粘合在一起来构建复杂的应用

由于 Javascript 支持:

  • 一流的功能
  • 匿名函数
  • 词法闭包

但这里有一些需要注意的事项:

  • 缺乏流行的高效功能数据结构库
  • 缺乏尾调用优化(至少目前)
  • 部分应用比 Haskell 中的语法更繁重
  • 许多流行的库并不是特别实用
  • DOM 没有功能(按设计)

但是,您最后的评论——“我不想开始组装我自己的工具集,如果它一旦变得太大就会破坏一切”——是一个很好的评论。这基本上是每种方法的问题,我不能告诉你当事情变得太大时,Javascript 中的 FP 是否会比“主流”技术更成问题。但我可以告诉你,根据我的经验,Javascript 中的 FP 可以帮助我防止事情变得太大。

关于javascript - 将函数式编程原则应用于 Javascript 是一个非常可行的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com