纯函数是所有函数式编程语言中使用的概念,这是一个非常重要的概念,因为它是函数式编程的基础,它允许你创建简单和复杂的组合模式。
纯函数背后的数学术语我就不说了,我直接说说说它们是什么以及它们的样子。
你可以确定满足以下条件的函数是纯函数:
-
它应始终返回相同的值。不管调用该函数多少次,无论今天、明天还是将来某个时候调用它。
-
自包含(不使用全局变量)。
-
它不应修改程序的状态或引起副作用(修改全局变量)。
第一个条件:应始终返回相同的值
以以下功能为例
Math.cos(0) // 1
无论今天,明天还是将来某个时间调用 Math.cos(0) 都没关系,输出始终为 1 。我们来看一个新的例子
const numberOfApples = 5; const applesBought = 5; const add = (num1, num2) => num1 + num2; const totalApples = add(numberOfApples, applesBought) // 10 const totalApples = add(numberOfApples, applesBought) // 10 // ... one month later const totalApples = add(numberOfApples, applesBought) //10
add函数也会发生同样的事情,不管调用该函数多少次或何时调用该函数,每次输出都相同。
现在,我们来看一个随时间或每次调用而变化的函数:
Math.random() // 返回一个随机数 Math.random() // 返回一个不同的随机数 // 一个月后 Math.random() // 返回一个不同的随机数
如你所见,每次调用 Math.random() 时,输出都会改变,因此我们不能说 Math.random() 是纯函数。
第二标准:自包含
通过使用非纯函数,这个标准也很容易理解,所以让我们看看非纯函数是什么样子的:
const numberOfApples = 5 const applesBought = 5 const addApplesToTotal = (num1) => numberOfApples + num1; const totalApples = addApplesToTotal(applesBought); // 10
从上一个示例可以看到,函数 addApplesToTotal 使用的是上面定义的变量,它不是传递 numberOfApples 的值,而是直接访问外部范围。因此, addApplesToTotal 不是自包含的。
第三个条件:它不应修改程序的状态或引起副作用
与前面的标准一样,可以使用非纯函数很好地演示这个标准。我们来看一下 :eyes:
let totalApples = 5
const applesBought = 5
const addApplesToTotal = () => {
totalApples += applesBought
};
addApplesToTotal()
你能从前面的不纯函数中注意到什么?它打破了前面的两个标准!!
-
它正在访问外部作用域,因此它不是自包含的。
-
它正在引起副作用,因为它改变了
totalApples的值。
为什么纯函数很重要?
-
纯函数不那么复杂
-
更容易调试 :bug:
-
易于组合
-
易于并行化
总结
纯函数是函数编程中一个基本但功能强大的概念。学习和习惯纯函数可以使你更轻松地测试和调试代码。它们将允许你学习关于函数式编程的更复杂的知识。
推荐阅读
HTML页面生成器:使用JavaScript和Node创建CLI
温故知新 | Vue.js进阶必会,编写你的第一个Vue.js插件
从零开始使用JavaScript制作自己的命令行(CLI工具)
如果对你有帮助,还可以 在看、留言、 转发 ,这是对作者最大的帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript & jQuery
David Sawyer McFarland / O Reilly / 2011-10-28 / USD 39.99
You don't need programming experience to add interactive and visual effects to your web pages with JavaScript. This Missing Manual shows you how the jQuery library makes JavaScript programming fun, ea......一起来看看 《JavaScript & jQuery》 这本书的介绍吧!