首页 > 其他分享 >Pure Function

Pure Function

时间:2024-01-17 17:12:35浏览次数:24  
标签:Function return 函数 pure 外界 参数 Pure const

Pure Function 纯函数

1.纯函数一定要有输入和输出,函数内使用到的变量最好都应该从参数中获取

const pure = (a,b,c) {
    return a + b + c
}
let c = 1                                                                                              
const impure = (a, b) {
    return a + b + c
}

const RATE = 2
const pure = (a,b) {
    return a * b * RATE
}
  • 第一个函数使用到的变量全都来自于传参,因此是纯函数
  • 第二个函数则使用到了外界参数,会存在外界参数被改变的风险,所以不是纯函数
  • 第三个虽然使用到了外界参数,但是因为RATE是静态变量,不会再次改变值,所以第三个函数是纯函数

2.只会在乎函数内的逻辑,不与外界有联系

  外界的参数变化不会导致纯函数的输出结果

//pure function
const pure = (a) => {
    return a * a
}
//impure function
let _a = 1
const pure = (a) => {
    return a * _a
}
  • 第一个函数做了一个参数平方的处理。无论全局上下文做了什么处理,只要每次输入的参数a都相同,那么这个函数返回的结果都会相同
  • 第二个函数做了一个参数和外界变量相乘的处理。在这个例子中,_a这个变量是会被改变的,这样即使每次输入相同的参数a,却不能保证函数返回相同的结果,因此他不是纯函数

  纯函数只会进行参数读取、处理、返回,除此之外不会对有副作用

const pure = (a,b) => {
    return a + b
}

const impure = (a,b) => {
    const res = a + b
    console.log(res)
    return res
}
  • pure()对参数进行相加处理,然后进行结果返回,至此该函数工作结束
  • impure()对参数处理后,在返回前进行了结果打印,这是非纯函数带来的
    • 纯函数不应该使用I/o进行操作
    • 纯函数不应该改变函数外部的可变变量

纯函数带来的好处

  • 降低代码耦合性,减少出错的风险

  • 利于进行测试,只要保证输入就能测试输出

  • 不受外部影响,纯函数是独立个体,不会因为外界变化造成逻辑错误

  • 没有副作用,利于封装复用,重构

标签:Function,return,函数,pure,外界,参数,Pure,const
From: https://www.cnblogs.com/karle/p/17970483

相关文章

  • 无涯教程-SQL SUM Function函数
    SQLSUM函数用于查找各种记录中一个字段的总和。要了解SUM函数,请考虑一个employee_tbl表,该表具有以下记录-SQL>SELECT*FROMemployee_tbl;+------+------+------------+--------------------+|id|name|work_date|daily_typing_pages|+------+------+---......
  • 无涯教程-SQL COUNT Function函数
    SQLCOUNT函数是最简单的函数,在计算预计由SELECT语句返回的记录数时非常有用。要了解COUNT函数,请考虑一个employee_tbl表,该表具有以下记录-SQL>SELECT*FROMemployee_tbl;+------+------+------------+--------------------+|id|name|work_date|daily_typ......
  • 转发 vb.net 使用 lamdar表达式 IProgress 不报告,注意 function 与 sub 的语法
    转发网址:https://qa.1r1g.com/sf/ask/3476729581/IProgress不报告  vb.net async-await progress-bar 我有以下代码来报告进度。该函数CalculateMandelbrot()似乎是异步工作的,但我的进度条什么也没显示。PublicClassForm1PrivateAsyncFunctionButton1_Clic......
  • 创建DOM节点时出现错误信息:box.appendChild is not a function
    1、代码正常书写如下<divclass="box"></div><!--JavaScript代码--><script>//创建节点letbox=document.getElementsByClassName("box");letwords=document.createElement("span");......
  • node-red__function_2
              ......
  • 矩阵乘法 - CF678D Iterated Linear Function
    CF678DIteratedLinearFunction题意\(f_{i,x}=A\timesf_{i-1,x}+B\)且\(f_{0,x}=x\)求\(f_{n,x}\)。思路这道题的递推关系十分清晰。但由于数据范围大(\(1\leA,B,x\le10^9,1\len\le10^{18}\)),所以这道题只能使用矩阵乘法加速递推。矩阵的构造我们需要构造一个......
  • SQL Server报错The datediff function resulted in an overflow
    建模提醒功能异常,获取查询语句到数据库执行报错:Msg535,Level16,State0,Line62Thedatedifffunctionresultedinanoverflow.Thenumberofdatepartsseparatingtwodate/timeinstancesistoolarge.Trytousedatediffwithalessprecisedatepart.消息535,级......
  • 关于函数式接口中常用的Supplier、Consumer、predicate、Function的总结以及其使用场
    首先介绍一下函数式接口:函数式接口在Java中是指:有且仅有一个抽象方法的接口。函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导......
  • 迈入AI智能时代!ChatGPT国内版免费AI助手工具 peropure·AI正式上线,打造场景化智慧服务
     当OpenAI发布ChatGPT的时候,没有人会意识到,新一代人工智能浪潮将给人类社会带来一场眩晕式变革。其中以ChatGPT为代表的AIGC技术加速成为AI领域的热门发展方向,推动着AI时代的前行发展。面对技术浪潮,清越科技(PeroPure)立足多样化生活场景、精准把握用户实际需求,持续精确Fine-......
  • [Codeforces] CF1538F Interesting Function
    CF1538FInterestingFunction题目传送门题意给定两个正整数\(l,r\)(\(l<r\)),将\(l\)不断加\(1\)直到\(l=r\),求出这一过程中\(l\)发生变化的位数总数。位数变化指:\(l=909\),将\(l+1\)后有\(2\)位数字发生变化。\(l=9\),将\(l+1\)后也有\(2\)位数字发生变......