【发布时间】:2016-10-18 17:39:09
【问题描述】:
我正在按照本指南开始学习使用 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);
}
但以下是纯粹的:
function pureFunction(data, ts) {
return md5(data + ts);
}
假设我理解正确,那有什么意义呢?我对这个领域的这一部分还很年轻。我还不明白这有什么用。在函数中包含时间戳是否会使函数有状态并破坏纯度?
强制这些值在别处创建并作为参数传递给纯函数有什么好处?
【问题讨论】:
-
嗯,您从哪里得知第一个版本不纯?对我来说看起来很纯粹:)
-
@niceman 它根本不纯,在相同的输入上给出不同的结果
-
@JaredSmith 啊哈我明白了,
new Date()得到的是当前日期,我的错误 -
在给定相同输入的情况下始终返回相同输出的函数更容易推理。此外,这种保证允许函数式编程语言使用延迟执行和记忆等策略来提高性能。
标签: javascript functional-programming purely-functional