一、Rxjava从头学:响应式编程

响应式编程,现在被经常提起,同时越来越多的出现在我们的代码构建中。同时现在有很多主流的响应式框架,如RX等,如果不能够理解响应式编程的话,对此类框架的使用总是有一些迷惑。那么,到底什么是响应式编程?

搜索网络会有一大片的响应式编程的解释,其中描述的最多的就是异步数据流编程。 类似这样的解释有很多,这个解释更与Rx的描述接近,而非响应式编程。(网络上大多是讲的响应式编程的实现方式,而非到底什么是响应式编程)

那么到底什么是响应式编程? 我又去stackoverflow搜索了一下,找到了一些答案,当然我的理解依然可能出现偏差,但是这已经帮助我对响应式编程的理解打开了一扇大门。

1. 我理解的响应式编程(Functional Reactive Programming)

什么是响应式编程?是以响应式思维来思考程序设计及实现的一种编程方式。于是我搜索了stackoverflow,有一篇文章吸引了我:What is Reactive Programming?。它通过一个简短的例子,描述了什么是响应式思维(可能只是其中的一部分).

1.1 例子

var a = 10;
var b = a + 1;
a = 11;
b = a + 1;
...

这段代码想要描述一种关系,a是独立的个体,b的值依赖于a,当a的值发生变化时,b的值依照某种关系同样发生变化。但是这种依赖关系非常短,当第二行和第四行代码一旦执行结束时,这种依赖关系就结束了。如果a的值再此发生变化,b需要重新与a建立依赖关系,如果我们忘了建立这种依赖关系,那么就会造成b的与不同步,产生不可预料的后果。

那如果我们用想用响应式思维来设计这段代码会是什么样子呢?

//这是一段伪代码
var a = 10;
var b <= a + 1;
a = 20;
Assert.AreEqual(21,b)

通过上面这段代码我们看到,我们通过这个(<=)这个操作符,对a和b建立以了一种关系,这种关系是一种显示并且持久的关系,每当a的值发生变化时,b的值都会发生变化。他们总是能够达到同步。

变量之间的依赖关系存在于程序员的的头脑中及想法中,而通过响应式编程,我们把这种关系变为显示的实现,变成了代码的一部分。

1.2 我理解的响应式思维

通过上面那个例子,我们可以把响应式思维理解为,通过某种方式为有关联的个体(值或者一组行为)之间建立永久的关系,这种关系一旦建立是不间断的、永久的 ,其中的一个体发生变化时(随着时间),另外的个体(们)可以通过这种关系,进行不同的变化(做出响应),有点类似与观察者和被观察者模式。

其实我认为响应式编程和观察者模式讲述的是同一种东西,只是角度不一样。
- 观察者模式:当被观察者发生变化时,需要手动的去通知所有的观察者,告知他们被观察者发生了变化。
- 响应式编程:当被”观察者“发生变化时,与“被观察者”建立了某种关系的”观察者“会自动的跟随“被观察者”进行变化。

同时网上也另外有一个非常简短的解释对FRP做了更深一步的补充:

FRP is about "datatypes that represent a value 'over time'
Conventional imperative programming captures these dynamic values only indirectly, through state and mutations. 
The complete history (past, present, future) has no first class representation. Moreover, only discretely evolving values can be (indirectly) captured, since the imperative paradigm is temporally discrete. 
In contrast, FRP captures these evolving values directly and has no difficulty with continuously evolving values.

FRP是一种“随时间推移而代表值的数据类型”。传统的命命程序只能通过状态和突变间接地捕获这些动态值。没有一个类能在开始定义的时候就表示出完整的历史(过去、现在、未来)

这是我目前理解的响应式思维。

2. 目前主流的响应式编程的解释

https://gist.github.com/staltz/868e7e9bc2a7b8c1f754

http://blog.csdn.net/womendeaiwoming/article/details/46506017

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值