【问题标题】:Can a method be a pure function?方法可以是纯函数吗?
【发布时间】:2021-06-02 14:01:33
【问题描述】:

我正在学习函数式编程。我有一个非常具体的问题。 从技术上讲,类方法可以被视为纯函数吗? 假设我们有一个 add 方法:add(a, b) { return a + b }。 add 方法是纯函数还是应该在类之外声明为纯函数?

【问题讨论】:

  • 当然,为什么不呢?
  • 只要您不提及this 或外部变量,就可以。
  • @ScottSauyet 你甚至可以引用this 并使用它的属性,只要你不改变它们
  • @ScottSauyet 该参数适用于函数接收作为输入的任何可变对象,无论它是否是该对象的方法。
  • @ScottSauyet 实际上我也是这样做的!每次遇到这样的问题,我都会多加思考。我认为我们所说的都有点正确,因为 JS 不是引用透明的,因此无论如何都没有有意义的纯度定义。我想有些人只是愿意更加确信 JS 中的表达式是纯的,而另一些人则要求更有力的保证。就是这样。

标签: javascript function methods functional-programming


【解决方案1】:

是否应该在类之外声明为纯函数?

不,没关系。 Purity (or: referential transparency) is a property of what the function (the code inside it) does,不是存储位置。

【讨论】:

  • 我不认为这个 Q 这么简单,要方法也应该无副作用,然而,它是一种隐含的方法依赖于实例上下文 (this)... 可能,要归类为 pure 方法也必须是 static 或类只是一个 命名空间。我不会将Foo#baz 归类为纯粹的,尽管它尊重参照透明原则。 class Foo { bar() {}; baz() { this.bar(); return true; }}
  • @Hitmands 我认为this 参数的使用与副作用的使用无关它不是关闭状态。 (另见问题 cmets 中与 Scott 的讨论)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2018-08-05
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2018-08-10
相关资源
最近更新 更多