什么是纯函数?

原文链接:https://note.noxussj.top/?source=helloworld


什么是纯函数?

相同的输入永远会得到相同的输出,而且没有任何可观察的副作用。纯函数就类似数学中的函数(用来描述输入和输出之间的关系)y=fn(x)

纯函数库

我们平时用的 lodash 其实就是纯函数库。

纯函数的优点

  1. 可缓存(直接提升性能)

也就是我们平常说的函数缓存,因为纯函数对相同的输入始终有相同的结果,所以可以把纯函数的结果缓存起来,就没必要每次调用该函数都要重新执行一遍函数体的代码

  1. 可测试

纯函数让测试更方便,不受副作用的影响

  1. 并行处理

在多线程环境下并行操作共享的内存数据很可能会出现意外情况(纯函数内的数据都是独立的),纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数

基础案例

纯函数

相同的输入始终得到相同的输出

1const array = [1, 2, 3, 4, 5] 2 3console.log(array.slice(0, 3)) 4console.log(array.slice(0, 3)) 5console.log(array.slice(0, 3)) 6 7// [ 1, 2, 3 ] 8// [ 1, 2, 3 ] 9// [ 1, 2, 3 ]

不纯的函数

相同的输入得到的输出却不相同

1const array = [1, 2, 3, 4, 5] 2 3console.log(array.splice(0, 3)) 4console.log(array.splice(0, 3)) 5console.log(array.splice(0, 3)) 6 7// [ 1, 2, 3 ] 8// [ 4, 5 ] 9// []

函数缓存

每次调用函数,并且传入参数相同时,函数体内代码不会被执行,直接返回上一次输出的结果

1const lodash = require('lodash') 2 3function getArea(r) { 4 console.log(r) 5 return Math.PI * r * r 6} 7 8let getAreaWithMemory = lodash.memoize(getArea) // 创建一个缓存函数 9 10console.log(getAreaWithMemory(4)) 11console.log(getAreaWithMemory(4)) 12console.log(getAreaWithMemory(4)) 13console.log(getAreaWithMemory(5)) 14 15// 4 16// 50.26548245743669 17// 50.26548245743669 18// 50.26548245743669 19// 5 20// 78.53981633974483
点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

单元格自动计算

在我们填报报表时,有的单元格的数据是需要通过自动计算直接获得,但是不是所有的函数都支持填报自动计算,这是为什么呢?报表是纯java的,其函数是后台程序,是在服务器中完成计算的。而填报中的自动计算是在客户端完成的,这个怎么实现呢?实际上是做了一个函数转换,把后台java函数转换成了适合前端计算的js函数。也就是说能够进行填报自动计算的函数有两套代码,java代

什么是函数式编程?

原文链接:什么是函数式编程?函数式编程(FunctionalProgramming,FP)就是利用纯函数实现细粒度的函数,然后再通过函数的组合把细粒度的函数组合成功能更强大的函数。函数式编程中的"函数"不是程序中的函数(方法),而是数学中的函数(映射关系)

React Hooks 快速上手

ReactHook快速上手一、Hook简介1.1Hook历史在ReactHook出现之前的版本中,组件主要分为两种:函数式组件和类组件。其中,函数式组件通常只考虑负责UI的渲染,没有自身的状态也没有业务逻辑代码,是一个纯函数。而类组件则不同,类组件有自己的内部

Boost Python官方样例(三)

导出C类(纯虚函数和虚函数)大致做法就是为class写一个warp,通过get\_override方法检测虚函数是否被重载了,如果被重载了调用重载函数,否则调用自身实现,最后导出的时候直接导出warp类,但是类名使用class,析构函数不需要导出,因为它会被自动调用纯虚函数编写C函