函数响应式编程思想(FRP)

4,138 阅读4分钟

函数响应式编程(Functional Reactive Programming)

是一种抽象程度很高的编程范式

FRP

一、 函数式编程(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实践

注册登录
当用户名和密码都与值时,登录按钮才能使用。