【问题标题】:is a function pure if it uses const declared pure function in the scope?如果函数在范围内使用 const 声明的纯函数,那么它是纯函数吗?
【发布时间】:2021-10-04 05:02:33
【问题描述】:
const pureFunc = (x) => x + 1

const isPureFunc = (x) => {
  return pureFunc(x) + 1
}

即使一个函数使用了一个没有依赖关系的 const 声明的纯函数,该函数是一个纯函数吗?

【问题讨论】:

  • 这个特殊的函数是纯粹的,因为它满足两个标准:(1)对于相同的输入,输出是相同的(即,它是确定性的),以及(2)没有副作用跨度>
  • 你可能会觉得这很有趣:stackoverflow.com/questions/39834458/…

标签: javascript functional-programming


【解决方案1】:

是的,因为结果取决于它自己的 args,而不是其他的。 这个结果不会从其他函数改变,但如果 x 参数会改变,就会改变。

所以它是纯函数。

【讨论】:

    【解决方案2】:

    我会说这个函数不是纯粹的, 它的返回值取决于一个无法控制的全局函数……参照透明原则指出,给定相同的输入,一个函数必须产生相同的输出。但是,对pureFunc 的依赖构成违规(它可能会改变,或者本身不纯)。

    要纯粹,或“按书本纯”,应该这样重构:

    const isPureFunc = (fn, x) => {
      return fn(x) + 1
    }
    
    const pureFunc = (x) => x + 1;
    
    const result = isPureFunc(pureFunc, 5);
    

    话虽如此,当然,我们不需要“那个”学术,并接受这个整体程序作为纯程序,因为pureFunc功能“实际上”在控制之下。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 2011-06-12
      • 2015-04-12
      • 2022-01-23
      • 2020-10-19
      • 2018-04-12
      • 1970-01-01
      相关资源
      最近更新 更多