响应式编程(学习小结)

定义

维基百科:
响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流变化传播的编程范式。

对于响应式编程,不同语言都有相应的扩展库。例如RxJava、RxAndroid、RxJS等等。

官网:
An API for asynchronous programming with observable streams
用于使用可观察流进行异步编程的API

个人理解:
创建出数据流(事件流),使用操作符对数据流进行组合转换订阅此数据流来执行其他功能。或者说监听到数据流后来执行其他功能。

扩展库

Reactive Extension,也叫ReactiveX,或者简称Rx,指的是实践响应式编程的一套工具(库)。
改进了异步编程模型。
开发语言并没有天生对响应式编程支持,所以需要对编程语言做一层功能扩展。

例如:RxJava、RxJs、RxAndroid

它对观察者模式进行了扩展,以支持数据和(或)事件序列;并添加许多运算符,这些运算符可以以声明方式组合;同时抽象出对以下问题的关注:低级线程,同步,线程安全,并发数据结构和非线程等。

结合优秀的思想

响应式编程结合了如下三种优秀的思想:

  • 观察者模式
  • 迭代器模式
  • 函数式编程

下面重点说一下函数式编程

函数式编程

函数式编程就是非常强调使用函数来解决问题的一种编程方式。

此处的函数有特殊的要求:

  1. 声明式
  2. 纯函数
  3. 数据不可变性
命令式 vs 声明式
//命令式:告诉计算机该怎么做
function double(arr) {
  const results = []
  for (let i = 0; i < arr.length; i++){
    results.push(arr[i] * 2)
  }
  return results
}
//声明式:告诉计算机做什么
function double(arr) {
  return arr.map(function(item) {
    return item * 2
  });
}
纯函数

函数的执行过程完全由输入参数决定,不会受除参数之外的任何数据影响。
函数不会修改任何外部状态,如修改全局变量或传入的参数对象。


const array = [1, 2, 3];
const newArray = double(array);
//array 的值是[1,2,3]
//newArray 的值是[2,4,6]


const originalArray = [1, 2, 3];
const pushedArray = arrayPush(originalArray, 4);
const doubledPushedArray = double(pushedArray);
// pushedArray值应该是[ 1, 2, 3, 4 ]
// doubledPushedArray值应该是 [ 2, 4, 6, 8 ]

const doubleOriginArray = double(originalArray);
//doubleOriginArray值应该是 [ 2, 4, 6, 8 ]; originalArray被arrayPush方法修改了。

//再看arrayPush代码,显然不是一个纯函数
function arrayPush (arr, newValue) {
  arr.push(newValue);
  return arr;
}
//修改如下
function arrayPush (arr, newValue) {
  return [...arr, newValue];
}
不可变性

程序中的数据自然是需要变化的。这里的不可变性是指保持原有数据不变。
当我们需要数据状态发生改变时,保持原有数据不变,产生一个新的数据来体现这种变化。

观察者模式

在这里插入图片描述

迭代器模式

能够遍历一个数据集合的对象。就是提供一个通用的接口,让使用者完全不用关心这个数据集合的具体实现方式。

const iterator = getIterator();
while (iterator.isDone()) {//是否遍历完所有元素
 console.log(iterator.getCurrent());//获取当前游标所指向的元素
 iterator.moveToNext ();//将游标移动到下一个元素
}

Observable弹珠图

在这里插入图片描述

弹珠图

https://rxviz.com/examples/custom

RxJS源码

https://github.com/ReactiveX/rxjs/blob/master/src/internal/Observable.ts

函数响应式编程的优势

数据流抽象了很多现实问题。
擅长处理异步操作。
把复杂问题分解成简单问题的组合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青菜小王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值