RxJava-理解响应式编程

前言

如何系统地学习一个优秀的开源框架?我认为比较正确的方式应该是,先了解它的设计思想,然后学会如何去使用它,最后通过阅读源码来弄清楚它的实现原理。所以在学习 RxJava 之前,我们需要先对响应式编程有个大概的理解。

编程范式

编程范式是如何编写程序的方法论,它提供了一种编程规范(风格),来指导我们进行程序的设计。比较常见的编程范式有命令式、声明式、面向对象、函数式等。

命令式编程

我们最熟悉的一种编程方式,与冯·诺伊曼计算机结构密切相关。简单来说就是我们使用变量(var)、条件分支(if)、无条件分支(goto)、循环(for 、while)等,一步一步告诉计算机该如何去做(how)。比如我们要计算 1~10 中所有奇数之和,用命令式编程风格是这样的:

public static int imperative() {
        int[] array = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int sum = 0;
        //循环
        for (int num : array) {
            //条件分支
            if (num % 2 != 0) {
                sum += num;
            }
        }
        return sum;
    }

声明式编程

一种更为抽象的编程方式,我们只需要声明想做什么,只关注结果(what),至于具体怎么去做(how),则不需要关心,像SQL、HTML等都是声明式的。当然,针对上面的例子,我们也可以用 Java 8 中的 Streams API 来进行声明式地编程:

   public static int declarative() {
        return Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                .filter(x -> x % 2 != 0)
                .reduce(0, Integer::sum);
    }

理解响应式

响应式编程(Reactive programming)是最近几年才流行起来的,它是一种通过异步和数据流来构建事务关系的编程范式。关于响应式的思想,可以从维基百科的一个例子来说明:

a = b + c;

在命令式编程环境中,当 b 或 c 的值发生改变时,a 的值不会受到影响;而响应式的思想就是,a 的值会随着 b、c 的值的更新而更新。遗憾的是,我们的程序设计语言并没有提供类似的操作符,如果要实现这样的功能,就需要花额外的精力去构建和维护 a 和 b、c 的关系(注意,这里的 a、b、c 不能简单地理解为基本类型的变量,它们也可以是一个对象、一段业务逻辑等等)。

既然有了响应式的思想,慢慢地一些支持这种思想的框架就应运而生了,例如 Rx 系列,Bacon.js,RAC 等。这里我们主要了解一下 Rx(Reactive Extensions),Rx 即支持响应式编程的一种拓展,为响应式在不同语言中的实现提供指导思想。所以,其实 RxJava 就是帮助我们在 Java 语言中进行响应式编程的框架。

总结

暂时先这样,等系统学习完 RxJava 之后再补充。

参考


  转载请注明: ThisMJ RxJava-理解响应式编程

 上一篇
AAPT源码分析(二) AAPT源码分析(二)
准备此篇接着 AAPT源码分析(一) 继续分析 AAPT 的资源编译打包流程。 在资源编译之前,首先需要收集所有有效的资源文件,AAPT 用一个 AaptAssets 对象来描述收集到的资源文件集合。AaptAssets 类继承于 Aapt
2019-04-10
下一篇 
AAPT源码分析(一) AAPT源码分析(一)
前言通过 AAPT命令行使用实践,我们已经知道了如何去使用 aapt 这个工具。为了更详细地了解 aapt 的工作流程以及原理,我们接下来从源码的角度来分析一下,它是如何编译和打包项目资源文件的。aapt 相关源码的位置如下所示: AOSP
2019-03-15
  目录