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

Javascript 哈希函数的函数编程纯度要求,javascript,functional-programming,purely-functional,Javascript,Functional Programming,Purely Functional,我遵循本指南开始学习使用Javascript的函数式编程: 它将纯函数定义为: 仅对输入参数进行操作 有用的纯函数至少有一个参数 有用的纯函数必须返回某些东西 纯函数无法更改外部变量/无副作用 对于相同的输入,纯函数总是产生相同的输出 以下功能违反合同: 函数非纯(数据){ 设ts=新日期(); 返回md5(数据+ts); }程序将始终具有状态。总是。纯函数式编程的思想是将状态(尽可能)推到程序的边缘:例如,扫描一行用户输入,在其上执行一系列纯函数,然后将输出返回控制台 这有很多好处:

我遵循本指南开始学习使用Javascript的函数式编程:

它将纯函数定义为:

  • 仅对输入参数进行操作
  • 有用的纯函数至少有一个参数
  • 有用的纯函数必须返回某些东西
  • 纯函数无法更改外部变量/无副作用
  • 对于相同的输入,纯函数总是产生相同的输出
以下功能违反合同:

函数非纯(数据){
设ts=新日期();
返回md5(数据+ts);

}
程序将始终具有状态。总是。纯函数式编程的思想是将状态(尽可能)推到程序的边缘:例如,扫描一行用户输入,在其上执行一系列纯函数,然后将输出返回控制台

这有很多好处:

  • 纯函数很容易测试
  • 与状态相关的bug可以隐藏的地方更少
  • 纯函数可以用来生成高性能的机器代码
  • 没有缓存失效。由于函数是引用透明的,因此可以随意记忆
  • 它为真正酷的东西打开了大门,比如热代码重新加载。我不能说这有多棒

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

hmm你从哪里得到第一个版本不是纯的?在我看来很纯洁:)@niceman它一点也不纯洁,在同一个问题上给出不同的结果inputs@JaredSmith啊,我明白了,
new Date()
get's the current Date,我的mistake函数总是返回相同的输出,给定相同的输入,这更容易解释。此外,这种保证允许函数式编程语言使用延迟执行和记忆等策略来提高性能。嗯,我认为OP想要一个更具体的答案来回答他的示例(为什么传递时间戳比创建时间戳更好),我也不知道javascript的VM(是Google V8还是spidermonkey还是…)像Haskell doesI看到的那样优化纯函数组织代码和调试的好处,但这不是纯函数的唯一原因,不是吗?@user1349419这就像说呼吸不是氧气的唯一原因,对吗?当然不是,但理由已经足够了。@JaredSmith明白了。所以我应该把它们看作是构建模块。对地基的要求。现在它是一个有支撑的空洞。以后,这些价值会被揭示吗?我越能利用这些规则,我就越能成为一名功能性程序员?