前几天有个同学问我,“什么是响应式编程”?另,它和函数式编程有啥区别?

Posted web前端教室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前几天有个同学问我,“什么是响应式编程”?另,它和函数式编程有啥区别?相关的知识,希望对你有一定的参考价值。


前几天有个同学问我,啥叫响应式编程?当时我正在讲课没顾得上回他。今天晚上仔细写个文章回复他,顺便我自己也学习一下。


响应式编程的英文名,Reactive Programming,那就是针对响应的呗。那啥叫响应呢?你烧水呢,水烧开了,水壶会叫,这就是一下响应了。不要想的太复杂,这些东西都是基于现实世界的需要而来的。


响应式它是依赖于事件的,响应式的代码它的运行不是按代码的顺序,而是跟多个按时间发生的事件有关。可能你会想,依赖事件?这不就是“回调”嘛,但在响应式编程里,这些按时间排列的事件,被称为“流”,stream


简单的讲,响应式中的事件序列类似于js的数组,它里面的事件流就是时间的序列。


//////


响应式写的代码,也还是js代码,只不过响应式是一种“响应式开发的思维方式”。你可以理解为它是js代码的新的组织方式。


刚才咱们提到了,响应式编程依赖于事件,那么再想想在js里事件是什么?当然是异步呀。而事件这个东西在响应式里被做为“事件序列,被称为流,它里面包含的是事件的时间值,这些时间值就是数据。


那么可以说,响应式编程,就是异步的数据流的开发。


在这种思维中,所有的东西,都是“流”。单击鼠标是流,双击鼠标是流,鼠标hover是流,...,全是流stream,你可以操作这些流stream,什么输入,属性,回调等等。


然后你就是对这些流的各种操作,合并流,过滤流,一个流input另一个流...,没有流stream,就没有响应式编程。


//////


刚才说了,一个流就是一串事件发生的时间的值的序列。这里面有至少三种东西,一,数据;二,报错error;三,完成。


你用js写嘛,当然还是异步的操作这些东西,监听数据,监听error,监听win事件。监听也叫“订阅”;而监听这些事件的函数,叫“观察者”;流stream就是“主体”,订阅 + 观察者等于啥?观察者模式嘛。所以说,不懂观察者模式,我个人主观觉得不太可能搞懂响应式编程。




//////


它有啥用?干嘛的?


响应式编程,它的关注重点在于“大量的UI事件与数据的互相影响”。啥意思呢,就例如某篇文章,你点个赞,那么一、所有其它人能看到赞;二、作者本人赞数量增加;三、文章权重提升;四、作者排名可能变化;。。。更多,“一个数据的变化,它的影响可能是呈现网状扩散”。


它的特点吧,一是速度响应快,低延迟;二是健壮性弹性,有故障也能尽量响应;三是资源弹性,访问量大自动加资源,少了自动减;四是有消息自动传递。


响应式的思想,实际是观察者模式 + (stream与事件源的通信控制)。它的具体实现有一个叫,ReactiveX 是一个基于一系列可观察的异步和基础事件编程组成的一个库。有兴趣的同学可以自行了解一下。


//////


它和函数式编程的区别,这个简单的说一下,函数式编程就是二个字,“不变”。啥都不变,一经创建永远不变。如果要变,再创建个新的。在它里面函数就是数据的通道。参数确定时,结果是可以预测的。


函数式编程的东西,等以后另外单独再写吧。


点击查看:

以上是关于前几天有个同学问我,“什么是响应式编程”?另,它和函数式编程有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

来聊聊ThreadLocal内存泄露分析

HarmonyOS - 本地相册的纠葛

自律的本质

前端开发常用哪些工具软件?

来聊聊ThreadLocal内存泄露分析

什么是响应式编程——响应式Spring的道法术器