(一)RxJava 入门概述

RxJava 是为 Java 和 Android 响应式编程开发的特定实现,它深受函数式编程的影响。RxJava 对函数的组合,避免了全局状态和函数调用副作用的出现,并且它使用流的方式编写异步和基于事件的程序。它从生产者/消费者(观察者模式)开始,然后扩展了数十个操作,有创建、转换、错误处理和生命周期管理等操作。

1. 响应式编程和 RxJava

响应式编程是一个通用编程术语,它对变化作出响应,比如数值或事件。它可以命令式,通常也是这样做的,如果要这样做,那么回调是实现此种响应式编程的一种很好的方式。例如,电子表格(excel)某单元的值依赖其他单元,那么它就会在所依赖单元变化时作出“响应”。

函数式响应编程?
虽然 RxJava 受到函数式编程的影响,但是它不是函数式响应编程(Functional Reactive Programming, FRP),FRP 是一种特殊的响应式编程,它对处理的事件和数值有时间连续性的要求,而 RxJava 只处理在时间上的离散的事件和数值。

如今计算机还是需要明确地被告知它需要做什么,怎么做,但是我们不会像 CPU 或相关的系统这样,因此,我们对它进行了抽象。Reactive-funcational programming 就是抽象,如同我们高级的命令式编程是对底层二进制和集成指令的一种抽象。理解命令式编程对于理解 reactive-functional programming 是什么,以及怎样执行是非常有帮助的。

reactive-functional 编程知识对编程的一种实现方式,它是在命令式上的又一次抽象,它使得我们在异步和基于事件的场景下无需把自己想象成计算机那样,也无需去定义复杂的对状态的交互逻辑,尤其是在线程间或网络边界中。

因此,reactive-functional programming 简而言之就是并发和并行,更通用的说,它可以避免在 Java 中使用回调机制,从而,使得我们可以以命令式方式去说明响应和异步。像 RxJava 这样的实现响应式编程风格的都受到函数式编程的影响,并且使用声明式的方法来避免在 reactive-imperative 代码中经常出现的陷阱。

2. 响应式编程使用场景

在如下场景中可以使用响应式编程:

  • 处理诸如鼠标移动或点击,键盘输入,GPS 信号随用户移动而变化等等用户事件。
  • 响应和处理磁盘或网络中任何延迟绑定的 I/O 事件,考虑到 I/O 本质上就是异步(产生请求,一段时间之后,可能收到响应,然后再触发进一步工作)。
  • 在应用中处理由生产者推送的数据或事件。

现在,假设有一段代码处理事件流,reactive-imperative 编程方式使用回调机制能很好解决问题,而使用 reactive-functional 编程方式并不一定给你带来更多的好处。如果有许多不同的事件流,并且相互之间完全独立,命令式编程方式是一个很好的选择。在这样的场景中,命令式编程方式是最有效的方式,因为它消除了响应式编程带来的抽象,并且更有利于当前操作系统,开发语言和编译器带来的优化。

如果你的程序需要组合事件(或来自函数或网络调用的异步响应),在它们之间还有条件逻辑交互,并且必须处理任何一个或所有这些事件的失败场景和资源清理,那么这时候,reactive-imperative 编程方式会给你带来复杂性,而 reactive-functional 编程方式能很好的解决它。

RxJava 的标语就是“一个用于编写异步和基于事件的库(a library for composing asynchronous and event-based pro‐ grams)”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值