Skip to content

稍有经验的程序员可能或多或少都听过一些关于函数式编程,或者 响应式编程(Reactive Programming) 等等类似的理念,特别是前端开发领域,由于近些年以Vue、React等为代表的数据驱动式框架的流行,大家在日常的开发中大量的接触了函数式组件,视图分离等函数式领域的思想。但用过并不总是代表会用,得益于这些框架作者的精巧构思,大量的底层细节在应用层面被隐藏,我们往往通过简单的上层API就足以应对日常的业务需求。

精进如你当然不会仅仅满足于会调用框架提供的API来实现业务需求,尽管通过遵循网络上提供的各种 Best Practice ,在复杂的业务场景下我们能够写出让自己都觉得难以置信的设计,总有那么一个夜晚,加班到深夜的你我拖着疲惫的步伐走在回家的路上,偶尔也会想更深入的了解今天的编程世界到底是如何构筑起来的。

网络上充斥着大量的“24小时学会Python“,“7天精通JavaScript”等让人惊悚的标题,这些内容和教程要不然就是太过于浅显,给人一种隔靴挠痒的感觉,好像会了一点又好像不知道从哪儿动手;要不然就是为了吸引眼球,24小时或者7天为你打开了一个新世界的大门,你翻过了一座山,发现后面是更多更高的山,令人沮丧。

RxJS 并不是一个全新的编程语言,也没有创造各种眼花缭乱的语法糖。它的核心是一系列的抽象,仅仅需要我们打开思想的大门,尝试去接受这样一种新的思考角度。

不要被任何所谓的陡峭的学习曲线所劝退,任何人都可以掌握它。

Don't ever let somebody tell you, you can't do something. Not even me. - The Pursuit Of Happyness

RxReactive 的一个简称,代表响应式程序设计。响应式程序设计是函数式编程领域的其中一个分支,代表通过函数式的编程风格来实现一种响应式的系统。这里我们并不会去探究为何函数式与响应式系统能擦出火花,更重要的是以 Rx 为代表的响应式思想近年来已经完全被主流编程圈所接受并遍地开花。Rx是真正可迁移的知识,当你真正学会和掌握了 RxJS ,事实上你得到了一个魔法棒,撬动的是整个编程的世界。

可迁移的知识 是指在一种情境中学到的知识和技能能够应用到不同但相关的情境中。这种能力在人工智能和机器学习中尤其重要,因为它能够显著提高模型的效率和适应性。

Rx 的朋友圈

  • RxJS
  • RxJava
  • RxDart
  • RxSwift
  • RxPy
  • RxCpp
  • RxAndroid
  • RxGo
  • RxPHP
  • RxKotlin
  • RxNetty
  • RxRuby
  • RxClojure
  • RxScala
  • RxGroovy
  • Rx.Net
  • ... ..

Rx 所引领的这股全新的编程潮流正在逐步攻占前端开发领域最核心的生态,包括Framework, Library和标准规范。

Reactive Programming


响应式编程(Reactive Programming) 是RxJS实现的基础,它的核心是一种基于事件的模型,面向数据流和数据流的变化及传播的声明式编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。这里借用了数据通信领域的一些思想,如果你继续深入了解,就会发现RxJS中的核心对象同时实现了单播、多播和组播等在通信领域常见的数据模型。

Vue在底层正是基于响应式模型设计的,并以此为基础实现了数据变化通知的机制;同时,Vue官方提供了 vue-rx 用来进一步将Vue的响应式对象与RxJS的数据流进行集成。AngularJS尽管在国内并没有那么广泛的使用,事实上它的底层完全基于RxJS的Observable体系来构建。React生态中常用的Redux数据管理框架从3.5版本开始也加入了对Observable的支持。

响应式设计和基于可观测的数据流在前端的各大主流框架中都有坚实的基础,同时,主要的前端技术栈正在逐步走向融合,各框架之间的差异越来越小,这也让响应式设计有成为前端公共技术基础的趋势。

Observable 成为标准


作为RxJS实现所依赖的核心对象类型,Observable类型正在纳入原生ECMAScript,并作为EC39其中一个重要的提案。

作为原生JavaScript语言标准的一部分,与Promise类似,Observable类型即将得到所有主流浏览器原生的支持,我们也不再需要通过额外的polyfill来预定义这个底层数据结构。

作为ECMAScript一部分的Observable在API层面与RxJS最早的实现存在一些细微的差别,但是不用担心,RxJS的作者们持续的在迭代和维护这个框架,截止目前,最新的7.0版本中已经涵盖了对浏览器原生Observable类型API的支持。

规划与目标


接下来,让我们共同走近RxJS的世界,快速学习和掌握这个神秘而强大的全新编程范式:

  • 核心概念:首先让我们了解Rx世界的核心概念,对象和各种前置知识。
  • Observable:详细了解Observable对象以及针对对象的各种操作符。
  • Subject:理解Subject对象以及衍生的各种子类型对象的特点和使用场景。
  • 应用:了解RxJS在各种编程框架中的实际应用和集成方法。

欢迎大家共同参与讨论和建议,让我们共同学习,日拱一卒。如果你觉得本文对你有些许启发,请持续关注我的公众号“戈伊星球”吧!

Released under the MIT License.