Hash函数的函数式编程纯度要求

时间:2016-10-18 17:39:09

标签: javascript functional-programming purely-functional

我按照本指南开始学习使用Javascript的函数式编程:https://medium.com/@cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536#.iynj38h83

它将Pure函数定义为:

  • 仅对输入参数进行操作
  • 有用的Pure函数至少需要一个参数
  • 有用的Pure函数必须返回
  • 纯函数无法更改外部变量/无副作用
  • 在相同输入的情况下,纯函数将始终生成相同的输出

以下功能违反了合同:

function notPure(data) {
  let ts = new Date();
  return md5(data + ts);
}

但以下是Pure:

function pureFunction(data, ts) {
  return md5(data + ts);
  }

假设我理解正确,重点是什么?我对这个领域的年轻人很年轻。我还不明白这是如何有用的。在函数中包含时间戳是否使函数有状态并打破纯度?

强制在其他地方创建这些值并将其作为参数传递给纯函数有什么好处?

1 个答案:

答案 0 :(得分:3)

程序将始终具有状态。总是。纯函数式编程的想法是将状态(尽可能地)推送到程序的 edge :例如,扫描一行用户输入,在其上执行一堆纯函数,并将输出吐回控制台。

这有很多好处:

  • 纯函数易于测试
  • 与状态相关的错误隐藏的地方较少
  • 可以生成纯函数以生成性能非常高的机器代码。
  • 没有缓存无效。由于功能是引用透明的,您可以随意记忆。
  • 它为热门代码重新加载等功能打开了大门。我不能过度说明这有多棒。

因此,对于您的示例函数,您将如何测试不纯的版本?纯版本很简单,你传递一个日期并断言它返回预期的输出。