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 可以让开发者摆脱底层的线程同步和各种并发问题。

推荐文章