函数响应式编程(Functional Reactive Programming)
是一种抽象程度很高的编程范式

一、 函数式编程(Functional Programming )
- 函数的定义:
给定一个数集A,对A施加对应法则f,记作f(A) ,得到另一数集B,也就是B=f(A)。那么这个关系式就叫函数关系式,简称函数。函数概念含有三个要素:定义域A、值域B和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。
- 函数式编程定义:
函数式编程是一种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
简单理解就是: 将函数作为一个单元来处理逻辑,给定一个输入值,就会有对应的一个输出值。函数还可以作为参数和返回值。
- 函数式编程的特性:
1)闭包
一种特殊的函数,绑定了函数内部引用的所有变量,把它引用的东西都放在一个上下文中“包”了起来。百科定义:包含两层含义要执行的代码块(自由变量以及自由变量引用的对象)和自由变量的作用域。
感觉像嵌套函数,内部的的函数可以捕获外部的变量
2)高阶函数
把函数作为参数或者返回值的函数
- map(映射):
map(f, [x1, x2, x3, x4]) = [f(x1),f(x2), (fx3), f(x4)]
- reduce(结果和下一个参数累积):
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3),x4)
- filter(筛选):
filter(func, [1, 2, 4, 5, 6, 9, 10, 15])
3)匿名函数
在传入函数时,有些时候,不需要显式地定义函数,可以直接传入匿名函数。
4)柯里化
把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
- 函数式编程的优点: 1)惰性计算 尽可能的推迟函数或表达式的计算过程,等到真正用到的时候才加载数据。 2)递归 在函数的尾部,调用另一个函数。递归就是从最后开始计算, 每递归一次就算出相应的结果, 也就是说, 函数调用出现在调用者函数的尾部 ,递归就是把当前的运算结果放在参数里传给下层函数。
二、 响应式编程(Reactive Programming )
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
举例说明:
a = 5
b = 10
c = a + b
正常情况下 c 等与此时的a+b,而之后改变a或b的值不会影响c,但在响应式编程中,c = a + b是一种绑定关系,所以c的值会随着a或b的变化而改变。
三、函数响应式编程(FRP)
1) 数据流: 在FRP的世界里,定义了一个新的类型—数据流。
一个流就是一串事件发生的时间的值的序列。这里面有至少三种东西:数据、报错、完成。
它是依赖于事件的,响应式的代码它的运行不是按代码的顺序,而是跟多个按时间发生的事件有关。在响应式编程里,这些按时间排列的事件,被称为“流”(stream)。而事件这个东西在响应式里被做为“事件序列,被称为流,它里面包含的是事件的时间值,这些时间值就是数据。 2)Schuduler FRP还提供了Schuduler,你可以指定你的Operator在哪个线程执行,你的Observer在那个线程监听事件,比如网络请求操作需要在后台线程执行,网络返回之后刷新页面需要在主线程执行。
四、FRP实践

