哈希函数的函数式编程纯度要求

Functional Programming Purity Requirements for Hash functions

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

它将纯函数定义为:

以下函数违反约定:

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

但以下将是 Pure:

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

假设我理解正确,那有什么意义呢?我对这个领域还很年轻。我还不明白这有什么用。在函数中包含时间戳是否会使函数有状态并破坏纯度?

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

程序总是有状态的。总是。纯函数式编程的想法是将状态(尽可能)推送到程序的 边缘 :例如扫描一行用户输入,执行一堆纯函数在上面,然后将输出吐回控制台。

这有很多优点:

  • 纯函数易于测试
  • 状态相关的错误隐藏的地方更少
  • 纯函数可以生成非常高效的机器代码。
  • 没有缓存失效。由于函数是引用透明的,你可以随意记忆。
  • 它为热代码重新加载等非常酷的东西打开了大门。我不能夸大那有多棒。

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