gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:48:42 25 4
gpt4 key购买 nike

我正在按照本指南开始学习使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com