到这里函数式编程我们就讲完了,下面我们来总结一下,整个函数式编程我们分为四个部分。

也就是函数式编程的概念。

函数式编程是一种编程范式,或者说编程思想,他和面向对象编程是同一级别的,我们想要掌握一门编程思想是需要花费很长时间的,我们可以把我们掌握的直接在工作中运用,不需要把所有东西都用函数式来写,因为这看起来太困难了。

函数式编程的核心思想是,把运算过程进行抽象成函数,在编程的过程中是面向函数进行编程的。

现在我们要学习函数式编程是因为像vue或者react,他们内部都已经使用了部分的函数式编程的思想,所以学习函数式编程有助于我们去使用vue或者react。

函数是一等公民指的是,函数也是对象,所以我们可以把函数像值一样去处理,函数也可以作为另一个函数的参数,或者返回值。

高阶函数其实就是把函数作为参数或者把函数作为返回值,我们在使用柯里化或者函数组合的时候其实就是基于高阶函数的,至于闭包他是无处不在的。

lodash是一个函数式编程的库,它里面提供了很多函数式编程的方法,可以辅助我们开发。

纯函数指的是给一个函数输入相同的参数,总能得到相同的输出,并且没有任何的副作用,纯函数其实就是数学中的函数,可以把一个值映射成另一个值,纯函数可缓存,可测试并且方便并行的处理。

柯里化可以对函数进行降维处理,也就是我们可以把多元函数转化成一个一元函数,我们把多元函数转换成一元函数的目的是我们在函数组合的时候要去使用。

我们理解了管道之后对于我们学习函数组合是有帮助的,我们可以把一个函数想象成一个处理数据的管道,我们给这个管道输入一个数据,当这个数据经过这个管道之后会得到一个相应的结果,函数组合其实就是这样来处理的。函数组合可以把多个一元的函数组合成一个新的函数,组合成一个功能更强大的函数。

函子可以帮助我们控制副作用,进行异常处理或者异步操作等等,函子的概念非常简单,我们可以把函子想象成一个盒子。这个盒子里面包裹着一个值,我们想要对这个值进行处理的话,我们需要调用这个盒子给我们提供的map方法。

map方法接收一个函数类型的参数,我们传递的这个函数,就是去处理值的这个函数。

我们通过Functor演示了函子的基本使用,后面我们又学习了MayBe函子,MayBe函子的作用是帮我们处理空值的异常,我们想要对异常进行处理的话,我们创建了Either函子,这些函子内部的value都是保存一个值。

后面我们创建了IO函子,他的value里面存储的是一个函数,使用IO函子可以延迟执行一个函数,使用IO函子可以控制副作用。

再后面我们学习了Task,在学习Task的时候,介绍了一个函数式编程的库folktale,这个库没有提供功能性的方法,他提供的方法都是方便函数式处理的,这个库还提供了一些函子,比如说Task,Task的作用是进行异步处理,帮助处理异步任务。

Monad函子的作用是解决函子嵌套的问题,如果一个函子具有静态的of方法,并且还有一个join方法,那他就是一个Monad。