Rx.js 确实带来了响应式的编程思维,可以说一定程度上改变了我思考编程问题的方式,但是我目前也只在 A 框架和 R框架中用到过Rx.js, 作用就是作为数据流管理工具,除了作为数据流管理工具它真正的用出是什么?还有什么其它妙用?
作者:欲三更
链接:https://www.zhihu.com/question/301907588/answer/539754450
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/301907588/answer/539754450
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
frp也好,“lodash for async”也好,虽然精准的描述了rx的特征,但其实容易让人被误导或者陷入迷茫。
rx本质上就是解决了这么个问题——
还记得我们中学的数学题吗?我们经常看到类似这样的题设:
已知f(x)如何如何,而g(x)=f(x)+f(-x),问g(x)如何如何...
我们可以通过函数f(x)的性质推导出g(x)的一些性质,比如奇偶性什么的,尽管我们并不知道g(x)的解析式。
这种抽象思维所有的理科生都具备,然而在写代码的时候,我们就不太能够应用这种抽象思维。因为我们手头的工具,总体而言都是用来操作具体值的。所谓的具体值,就是某个时刻某块内存里的内容,而操作,总体而言就是把这个内容变成另一个内容或者根据这个内容引发某种副作用。
我们并没有一种工具,用来描述如何通过一个抽象的符号,生成另一个抽象的符号。这其实不利于抽象思维。
而rx所做的,就是给我们一个新工具,让我们可以针对时间函数/序列/信号/事件流做抽象的编程,或者我们可以统称这些东西叫做“流”(stream)。通过使用rx,我们得以将业务逻辑,与流本身的变化规律分离,获得了更加高级的表达能力。
我不是数学方面的行家,如果我理解的没错的话,这其实是一种“代数”,让我们的编程从算数,进化到了代数阶段。
注意这里有一个潜藏的重要问题,就是这些流的具体取值,实际上是运行时决定的,我们在编码期并不知道,但这不妨碍我们在编码期描述针对流的操作。