内容简介:满足以下两点的函数:叫高阶函数,很显然js中的函数满足高阶函数的条件。函数作为参数:
高阶函数
满足以下两点的函数:
- 函数可以作为参数被传递
- 函数可以作为返回值输出
叫高阶函数,很显然js中的函数满足高阶函数的条件。
函数作为参数:
function pow(x) { return x * x; } const arr = [1, 2, 3]; const res = arr.map(pow);
函数作为返回值:
function getPrintFn() { function print(msg) { console.log(msg); } return print; }
高阶函数与函数式编程有什么关系?通过上一篇我们知道函数式编程采用纯函数,那怎么把不纯的函数转化为一个纯函数呢?通过把不纯的操作包装到一个函数中,再返回这个函数(即上面的例子),即可达到目的。
柯里化(curry)
只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
特点:
接收单一参数,将更多的参数通过回调函数来搞定;
返回一个新函数,用于处理所有的想要传入的参数;
需要利用call/apply与arguments对象收集参数;
返回的这个函数正是用来处理收集起来的参数;
function add(x, y) { return x + y; } // 柯里化 function add(x) { return function(y) { return x + y; } } const increment = add(1); increment(2); // 3
当我们谈论纯函数的时候,我们说它们接受一个输入返回一个输出。curry 函数所做的正是这样:每传递一个参数调用函数,就返回一个新函数处理剩余的参数。这就是一个输入对应一个输出。curry函数适用于以下场景:
- 延迟执行:不断的柯里化,累积传入的参数,最后执行。
- 固定易变因素:提前把易变因素,传参固定下来,生成一个更明确的应用函数。最典型的代表应用,是bind函数用以固定this这个易变对象。
代码组合(compose)
在函数式编程中,通过将一个个功能单一的纯函数组合起来实现一个复杂的功能,就像乐高拼积木一样,这种称为函数组合(代码组合)。下面看一个例子:
最佳实践是让组合可重用。
函子
我们知道,函数式编程实质是通过管道把数据在一系列纯函数间传递,但是,控制流(control flow)、异常处理(error handling)、异步操作(asynchronous actions)和状态(state)呢?还有更棘手的副作用(effects)呢?这些问题的解决就要引入函子的概念了。
我们首先定义一个容器,用来封装数据
函子封装了数据和对数据的操作,functor 是实现了map函数并遵守一些特定规则的容器类型。
把值装进一个容器,而且只能使用 map 来处理它,这么做的理由到底是什么呢?
让容器自己去运用函数能给我们带来什么好处?
Functor 是一个对于函数调用的抽象,我们赋予容器自己去调用函数的能力。当 map 一个函数时,我们让容器自己来运行这个函数,这样容器就可以自由地选择何时何地如何操作这个函数,以致于拥有惰性求值、错误处理、异步调用等等非常牛掰的特性。
函子的类型
1.Maybe(处理null问题)
2.Either(if…else)
3.IO(IO、网络请求、DOM)
4.Monad(嵌套问题)
Maybe
一种用来处理null和undefined问题的函子,避免繁琐的手动判空操作
Either
一种用来处理if…else问题的函子
IO
通过返回一个获取数据的函数来延迟IO的副作用,等调用者去执行有副作用的函数,
以保证获取数据过程中的无副作用特性
Monad
monad 是可以变扁(flatten)的实现了of方法的 functor
总结
学习函数式编程,实际上就是学习函子的各种运算。由于可以把运算方法封装在函子里面,所以又衍生出各种不同类型的函子,有多少种运算,就有多少种函子。函数式编程就变成了运用不同的函子,解决实际问题。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 函数式编程之数组的函数式编程
- 函数式编程 – 函数式编程如何影响您的编码风格?
- 纯函数:函数式编程入门
- 深入理解 Java 函数式编程,第 1 部分: 函数式编程思想概论
- 思想交融,Android中的函数式编程(2):什么是函数式编程
- 编程范式 —— 函数式编程入门
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro Django
Marty Alchin / Apress / 2008-11-24 / USD 49.99
Django is the leading Python web application development framework. Learn how to leverage the Django web framework to its full potential in this advanced tutorial and reference. Endorsed by Django, Pr......一起来看看 《Pro Django》 这本书的介绍吧!