我正在按照本指南开始学习使用 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);
}
假设我理解正确,那有什么意义呢?我对这个领域还很年轻。我还不明白这有什么用。在函数中包含时间戳是否会使函数有状态并破坏纯度?
强制这些值在别处创建并作为参数传递给纯函数有什么好处?
最佳答案
程序总是有状态的。总是。纯函数式编程的想法是将状态(尽可能)推到程序的边缘:例如扫描一行用户输入,对其执行一堆纯函数,并将输出吐回控制台。
这有很多优点:
- 纯函数易于测试
- 状态相关的错误隐藏的地方更少
- 纯函数可以生成非常高效的机器代码。
- 没有缓存失效。由于函数是引用透明的,您可以随意内存。
- 它为热代码重新加载等非常酷的东西打开了大门。我不能夸大那有多棒。
那么对于您的示例函数,您将如何测试不纯版本?纯版本很简单,您向它传递一个日期并断言它返回预期的输出。
关于javascript - 哈希函数的函数式编程纯度要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40114684/