函数式编程对哈希函数的纯度要求
Functional Programming Purity Requirements for Hash functions
我遵循这个指南开始学习函数式编程w/Javascript: https://medium.com/@cscalfani/so-you- wanna -to- a- function-programmer-part1-1f15e387e536 #.iynj38h83
它将Pure函数定义为:
- 只对输入参数操作 纯函数至少接受一个参数
- 有用的纯函数必须返回一些东西
- 纯函数不能改变外部变量/无副作用
- 对于相同的输入,纯函数总是产生相同的输出
下面的函数违反了契约:
function notPure(data) {
let ts = new Date();
return md5(data + ts);
}
但是下面是Pure:
function pureFunction(data, ts) {
return md5(data + ts);
}
假设我理解正确,这有什么意义?在这方面我还很年轻。我还不明白这有什么用。在函数中包含时间戳是否使函数有状态并破坏纯度?
强制在其他地方创建这些值并将其作为参数传递给纯函数有什么好处?
程序总是有状态。总是这样。纯函数式编程的思想是将状态(尽可能地)推到程序的边缘:例如,扫描一行用户输入,对其执行一堆纯函数,并将输出返回到控制台。
这有很多优点:
- 纯函数易于测试
- 状态相关的bug隐藏的地方更少
- 纯函数可以生成非常高性能的机器码。没有缓存无效。因为函数是引用透明的,你可以随意记忆。
- 它打开了真正酷的东西的大门,比如热代码重载。我不能夸大这有多棒。
那么对于您的示例函数,您将如何测试非纯版本?对于纯版本很简单,您向它传递一个日期并断言它返回预期的输出。
相关文章:
- 使用director.js执行基于哈希的函数
- 将哈希从URL传递到具有延迟的函数
- Emberjs :哈希中的函数原型
- coffeescript/backline.js:编写一个对字符串进行操作的哈希函数
- 文件的同步哈希函数
- Javascript 函数返回“[对象对象]”而不是哈希
- javascript/coffeescript 使用函数哈希作为参数
- 在 JavaScript 中生成 Amazon API 签名,导入哈希函数 (jQuery)
- 删除窗口哈希中的 # 以在函数中使用
- 如何使用 JavaScript 哈希作为函数中的参数
- 使点击函数返回不带哈希的 URL
- Javascript哈希器嵌套函数
- 字符串哈希函数,它将在JavaScript和PHP中产生相同的结果
- '这'当创建函数存储在哈希中的JS对象时,其作用域为窗口对象
- 使用指定的哈希函数解密哈希后的电子邮件地址
- 在带有Coffeescription的函数参数中使用哈希
- 简单的哈希函数,对HTML id友好,区分大小写
- 什么's是PHP哈希函数的Node.js等价项(包括salt和原始输出)
- mongodb中的加密哈希函数
- 返回静态函数的哈希值为空对象