1、Rxjava-简介
发布于 2022年 04月 02日 14:18
1 函数式编程 (Functional Programming,简称FP)
1.1 概念
如果说面向对象是抽象的名词,那么函数则是抽象的动词
Lamber演算的概念:用函数组合的方式来描述计算过程 ( 如果问题能够用一套函数组合的算法来表达,那就说明这个问题是可计算的。)
1.2 特性
- 函数是"一等公民":函数与其他数据类型一样,可以赋值给其他变量,也可以作为参数传入另一个函数,或者作为别的函数的返回值。
- 数据是不可变的(Immutable):变量一经初始化将不能修改。
- 强制使用纯函数:不产生副作用的函数。
- 支持函数递归调用
- 函数只接收一个参数
1.3 事例
举个例子,写一个自增函数
- 非函数式
int count;
void increment(){
count++;
}
- 函数式
int increment(int count){
return count + 1;
}
1.4 周边常用
高阶函数或其组合,比如map,filter,reduce。
2 响应式编程 (Reactive Programming,简称RP)
2.1 概念
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
2.2 特性
- 异步编程:事件回调,提高效率、降低延迟和阻塞。
- 数据流:只能以事先规定好的顺序读取一次的数据的一个序列。
- 变化传播:以一个数据流输入,经过一连串操作转化为另一个数据流,然后分发给各个订阅者的过程。
- 编程范式:计算机编程的基本风格或典型规范。(如面向对象、面向过程)
2.3 举例
流水线
- 数据流:在履带上运送要加工的物品
- 变化传播:把前一个环节的加工结果传到下一个环节
- 编程范式:每种物品的加工方式不同,流水线就不同
3 函数响应式编程(Functional Reactive Programming,简称FRP)
3.1 概念
把函数范式里的一套思路和响应式编程结合
FRP能让你的代码像数学一样简洁,业务像流水一样清晰流畅。
3.2 特性
- 数据流Observable
- 操作符Operator:对数据流的高阶操作符
- Schuduler:线程调度器
3.3 事例
Rxjava
4 Rxjava是什么
4.1 概念
Rxjava 是 观察者模式的扩展。
Rxjava 是 Reactive Extensions 的 java 实现,用于通过使用Observable/Flowable 序列来构建异步和基于事件的程序的库。
Rx 是 Reactive Extensions 的 缩写,是一个函数库。Rx = Observables + LINQ + Schedulers
- Observables:异步数据流
- LINQ:操作符api
- Schedulers:处理异步数据流并发
4.2 优点
(1)使用观察者模式。
- 创建:Rx 可以方便地创建事件流和数据流。
- 组合:Rx 使用查询式的操作符组合和变换数据流。
- 监听:Rx 可以订阅任何可观察者的数据流并执行操作。
(2)简化代码。
- 函数式风格:对可观察的数据流使用无副作用的输入/输出函数,避免了程序里错综复杂的状态。
- 简化代码:Rx 的操作符通常可以将复杂的难题简化为很少的几行代码。
- 异步错误处理:传统的 try/catch 没办法处理异步计算,Rx 提供了合适的错误处理机制。
- 轻松使用并发:Rx 的 Observables (包括 Observable、Flowable、Single、Completable 和 Maybe)和 Schedulers 可以让开发者摆脱底层的线程同步和各种并发问题。