高阶函数
提纲:
什么是纯函数(Pure Function)
副作用指的是,函数的行为受系统的全局状态所影响
为什么要有纯函数
什么是函数式编程
什么是副作用(Side Effect),副作用能做什么。
什么是函数响应式编程
什么Monad以及为什么要引入Monad
bind
return
ReactiveCocoa是如何实现响应式编程的
ReactiveCocoa bind的实现
ReactiveCocoa return的实现
ReactiveCocoa封装的一系列操作符
Functor:任何类别只要能执行fmap
操作,就是一个Functor
fmap
就是把一个函数应用在一个盒子里的值上,然后返回一个封装在盒子里的新值;
对于空值也就是Nothing
来说,执行fmap
操作后返回的还是Nothing
对于List
而言,执行fmap
,会将函数应用在List
的每一个值都上,并返回一个新的List
总结一下:Functor是能将函数应用在值上的一种类型。换句话说,Functor就是支持将一个值映射成另一个新值的类型
那如果要将一个函数应用在另一个函数上呢?
也就是说一个函数执行了fmap
操作后可以映射成一个新的函数,因此说函数也是Functor
函数的fmap
操作就是函数的复合
Functor:
将一个普通函数应用到被封装的值上
Applicative:
将一个封装的函数应用在封装的值上
Monad:
将一个“接收一个普通值并返回一个被封装的值”的函数应用在一个被封装的值上,这一任务由函数 >>=
(读作“bind”)完成。
ReactiveCocoa是如何实现Monad的
RACStream被定义为一种Monad类型,定义了两个基本操作bind
个return
RACStreamBindBlock
可以看做是“接收一个普通值并返回一个被封装的值”函数