参考链接: 用示例编写Java柯里化Currying函数

文章目录

纯函数什么是纯函数纯函数例子非纯函数例子

函数柯里化函数柯里化简单例子参数复用

纯函数

什么是纯函数

如果函数的调用参数相同,则永远返回相同的结果。它不依赖于程序执行期间函数外部任何状态或数据的变化,必须只依赖于其输入参数。

该函数不会产生任何可观察的副作用,例如网络请求,输入和输出设备或数据突变(mutation)。

这就是纯的函数。 如果一个函数符合上述 2 个要求,它就是纯函数。 你可能在过去甚至无意地情况下编写过纯函数。

纯函数例子

function getSum(num) {

return num * 2 + num

}

它符合我们所说的两条纯函数的定义。不依赖于任何外部输入,不改变任何外部数据、没有副作用。 即使你用同样的输入运行运行这个函数 100,000,000 次它依旧产生同样的结果。

非纯函数例子

let num = 10;

function getSum(num2) {

return num + num2

}

在这里函数的计算结果取决于外部num变量,而非函数不能依赖外部任何变量,所以它就是非纯函数

函数柯里化

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

函数柯里化简单例子

// 普通的add函数

function add(x, y) {

return x + y

}

// Currying后

function curryingAdd(x) {

return function (y) {

return x + y

}

}

add(1, 2)           // 3

curryingAdd(1)(2)   // 3

参数复用

// 正常正则验证字符串 reg.test(txt)

// 函数封装后

function check(reg, txt) {

return reg.test(txt)

}

check(/\d+/g, 'test')       //false

check(/[a-z]+/g, 'test')    //true

// Currying后

function curryingCheck(reg) {

return function(txt) {

return reg.test(txt)

}

}

var hasNumber = curryingCheck(/\d+/g)

var hasLetter = curryingCheck(/[a-z]+/g)

hasNumber('test1')      // true

hasNumber('testtest')   // false

hasLetter('21212')      // false

上面的示例是一个正则的校验,正常来说直接调用check函数就可以了,但是如果我有很多地方都要校验是否有数字,其实就是需要将第一个参数reg进行复用,这样别的地方就能够直接调用hasNumber,hasLetter等函数,让参数能够复用,调用起来也更方便。

[转载] 纯函数和函数柯里化相关推荐

  1. 【react】---函数化编程的理解,柯里化函数及返柯里化函数的理解...

    虚拟DOM  与 js概念的理解 01.纯函数的理解: 02.柯里化函数 编写一个函数add(3)(4)(5)  得出结果  12    //通过柯里化  函数就可以实现 一个函数内,执行过程中,返回 ...

  2. JS函数curry(柯里化)

    原文地址:http://blog.jobbole.com/77956/ 什么是柯里化? 柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数(译注:最初函数的第一个参数)的函数,如果 ...

  3. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

  4. JavaScript 中的函数式编程:函数,组合和柯里化

    作者:Fernando Doglio 译者:前端小智 来源:medium 移动端阅读:点这里 点赞再看,微信搜索 [大迁世界] 关注这个没有大厂背景,但有着一股向上积极心态人.本文 GitHub ht ...

  5. 什么是函数式编程,函数合并与柯里化又是什么意思?

    函数式编程在耳边回响了多年,今天就来详细了解一下它吧. 函数式编程的主要特征是:函数是一等公民.它建议大家写纯函数.没有副作用的函数. 讨论完纯函数的内容,我们会看一下最重要的应用:函数的柯里化. 纯 ...

  6. scala 高阶函数,闭包及柯里化

    概念 一个函数的参数或返回值还是函数,这个函数就是高阶函数 用法 参数为函数 scala> val arr=Array(1,2,3) arr: Array[Int] = Array(1, 2, ...

  7. 纯函数、柯里化、组合函数的解析以及代码实现

    文章目录 一.纯函数的概念和理解 二.JavaScript柯里化 1.柯里化的理解 2.将函数柯里化的代码实现 三.组合函数 1.组合函数的理解 2.通用的组合函数的实现 一.纯函数的概念和理解 纯函 ...

  8. JavaScript函数式编程(纯函数、柯里化以及组合函数)

    JavaScript函数式编程(纯函数.柯里化以及组合函数) 目录 JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 1.纯函数 1.1.纯函数的概念 1.2.副作用 1.3.纯函数 ...

  9. 函数的 柯里化和反柯里化

    函数1 函数的柯里化 柯里化(currying)是把接收多个参数的函数变换成为接收一个部分参数的函数,并返回接收余下参数的新函数的技术.通常这个参数是一个. 可能我们对这个解释不太明白. 现在我们来思 ...

  10. 打造属于自己的underscore系列(五)- 偏函数和函数柯里化

    这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...

最新文章

  1. mysql 多表查询or_MySQL 多表查询
  2. 已知旋转矩阵求角度_如何推导旋转矩阵
  3. php5.4与php5.2,升级php 5.2.14 到5.4.11版本报错问题
  4. Docker nginx部署阿里https(最新的方案)
  5. python中值滤波介绍_Python 实现中值滤波、均值滤波的方法
  6. 如何用ASP读写TXT文本文件中的内容
  7. Windows7系统下OpenCV2.4.4+PCL1.6.0+SSBA3.0+VS2010 IDE32环境下编译和安装以实现Sfm和PCL点云数据可视化...
  8. DP接口与HDMI接口的区别?
  9. 2022年化肥行业发展趋势
  10. html周志模板,校友邦周志范文16篇
  11. 解锁三星bl锁有几种方法_三星S8有几种解锁方式?三星S8解锁方法介绍
  12. java method方法_Java Method getDeclaringClass()方法
  13. 女神告诉你什么是互联网思维
  14. whatsns与tipask_tipask转whatsns问答系统插件
  15. sdhc卡文件丢失常见原因和两种恢复方法
  16. 大华nvr服务器返回消息错误,GB/T28181协议EasyGBS问题解决对接大华硬盘录像机NVR时查询录像失败...
  17. 云适配陈本峰:HTML5并非真正跨平台
  18. 用计算机打女生节快乐,女生节快乐的朋友圈说说
  19. 计算机硬盘磁盘有什么有害物质,电脑硬盘分区分错了有哪些危害?如何正确分区?千万别弄错了!...
  20. DevOps Master教练十二条原则

热门文章

  1. 34988 Happy Reversal(二进制去取反)
  2. java中变量运算细节 (2)
  3. python输入圆的半径公式_[图文]铁路曲线正矢的计算公式
  4. 金蝶二次开发好跳槽吗_金蝶财务软件不会操作怎么办?
  5. hibernate native oracle,hibernate native 主键生成策略
  6. wxpython多线程 假死_wxpython中利用线程防止假死的实现方法
  7. python怎么加图片_python中如何保存图片
  8. html页面怎么加向下滚动,如何使用jQuery向上或向下滚动页面到锚点?
  9. php决策管理,报表管理与数据分析:为系统未来发展规划提供决策依据,有效避免IT管理与投资的盲目??...
  10. Pytorch:保存图片