函数响应式编程是两个声明式编程的子范式(函数式 + 响应式)的组合。
(1)函数式编程
函数式编程是一种编程范式,实际上是如何编写程序的方法论。具有五个鲜明的特点
1)函数是“一等公民”。函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数传入另一个函数或者作为别的函数的返回值。
2)只用“表达式”,不用“语句”。”表达式”(expression)是一个单纯的运算过程,总是有返回值,”语句"(statement)是执行某种操作,没有返回值。函数式编程要求每一步都是单纯的运算,而且都有返回值。
3)没有”副作用”。副作用指的是函数内部与外部互动(最典型的情况就是修改全局变量的值)产生运算以外的其它结果。函数式编程没有副作用,意味着函数要保持独立,所有功能就是返回一个新的值,没有其它的行为,尤其是不得修改外部变量的值。
4)不修改状态。函数式编程只是返回新的值,不修改系统变量。
5)应用透明。指的是函数的运行不依赖于外部变量或”状态”,只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。
(2)响应式编程
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
举个简单的例子,表格A是用来记录其它两个表格(表格B、表格C)的和,当表格B或者表格C中的任意一个值发生变化时,这些变化都会通过表实时改变表格A的值。换句话说,我们定义好A是B和C的和值,无论发生什么,A都会响应B或C的变化。
二. 解决什么问题
程序开发中,使用异步操作来实现某个功能是非常普遍的。Apple 在它的SDK中提供了许多APIs来满足程序员的异步操作请求,如NotificationCenter、代理模式、GCD和闭包(OC中的block)。
异步操作有一个最大的问题:状态的不确定。用户输入,网络好坏甚至是iOS系统不同,都可能改变代码的执行情况。
函数响应式编程就是为了简化异步操作,使得开发人员可以像操作变量一样操作闭包。
三. 怎么做
RxSwift 和 ReactiveCocoa 是两个满足函数响应式编程范式的开源库,前者使用Swift开发,后者使用Objective-C。由于playground更适用于学习iOS的一些新技术,我将用RxSwift讲解一些实际应用。
小结:简单介绍了什么是函数响应式编程,以及通过函数响应式编程可以达到哪些效果。在iOS开发中,RxSwift是实现MVVM架构的重要组成部分(MVVM架构的优越性不再赘述)。
参考: 维基百科和http://news.realm.io/