随着前端框架react,angular以及vue的流行,响应式编程也开始在前端领域得以广泛应用。因此,了解并且理解响应式编程有助于更好地学习这些框架,同时利用好响应式编程的相关工具,可以让编程更加轻松。
什么是响应式编程
和平常经常听说的面向对象编程和函数式编程一样,响应式编程(Reactive Programming)就是一个编程范式,但是与其他编程范式不同的是它是基于数据流和变化传播的。我们经常在程序中这样写
A = B + C
A
被赋值为B
和C
的值。这时,如果我们改变B
的值,A
的值并不会随之改变。而如果我们运用一种机制,当B
或者C
的值发现变化的时候,A
的值也随之改变,这样就实现了”响应式“。
而响应式编程的提出,其目的就是简化类似的操作,因此它在用户界面编程领域以及基于实时系统的动画方面都有广泛的应用。另一方面,在处理嵌套回调的异步事件,复杂的列表过滤和变换的时候也都有良好的表现。
函数响应式编程
而主要利用函数式编程(Functional Programming)的思想和方法(函数、高阶函数)来支持Reactive Programming就是所谓的Functional Reactive Programming,简称FRP。
FPR 将输入分为两个基础的部分:行为(behavior)和事件(events) 。这两个基本元素在函数响应式编程中都是第一类(first-class)值。 其中行为是随时间连续变化的数据,而事件则是基于离散的时间序列 。例如:在我们操作网页的时候,会触发很多的事件,包括点击,拖动,按键事件等。这些事件都是不连续的。对事件求值是没有意义的,所有我们一般要通过fromEvent
,buffer
等将其变成连续的行为来做进一步处理。与RP相比,FRP更偏重于底层。由于采用了函数式编程范式,FRP也自然而然带有其特点。这其中包括了不可变性,没有副作用以及通过组合函数来构建程序等特点。
应用范围
- 多线程,时间处理,阻塞等场景
- ajax,websocket和数据加载
- 失败处理
- DOM事件和动画