V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KunMinX
V2EX  ›  Android

你用不惯 RxJava,只因缺了这把钥匙

  •  
  •   KunMinX · 2019-04-23 15:22:19 +08:00 · 9512 次点击
    这是一个创建于 2044 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    本文最初是为部门内部培训而准备的,但经过一番调研发现,同事们用不惯 RxJava,并不是因为网上介绍 “怎么用” 的教程不够多,恰恰是因为,一上来就急着发车的教程无数、却从未有过哪篇教程 舍得用几句话的功夫点破 RxJava 操作符究竟为何方神圣、我们为什么要用、为什么要那样用。

    Observable.just(1, 3, 5, 7, 9)
        .map(i -> i + 1)
        .filter(i -> i < 5)
        .subscribe(getObserve());
    

    事实上,在相当长的一段时间里,我也和大部分人一样,只知道使用 RxJava 来完成异步回调,至于那些操作符,则是能不用尽量不用,因为不知道葫芦里卖的什么药,看不懂、不会用。

    RxJava 三连

    因此,本文的初衷绝不是翻译官方文档、教大家怎么用,而是旨在帮助大家对 RxJava 操作符 完成感性上的认识。鉴于本次培训的效果还不错、同事们听了都说好,我便在 GitHub 开源了全套操作符示例代码(不要慌,链接文末已给出)。如果你在阅读本文后觉得恍然大悟,原来 RxJava 操作符是这么回事,那么我的愿望也就达到了。

    然而我并不发车

    编程语言包含多种编程范式

    我对操作符本质的顿悟,始于我对编程语言的理解。和你一样,我是做安卓开发,但有一天,我决定跳出 Java,从整个计算机科学的角度来学习和理解编程语言的本质,在这过程中,我接触了“编程范式”这个概念,了解到原来每个编程语言大都包含多种编程范式。

    常见的编程范式有:命令式编程、声明式编程等。

    编程范式

    以 Java 为例,咱们 Java 最主要的编程范式是命令式编程。命令式编程 即按顺序执行具体的命令,这些命令不仅交待了做什么,还详细交待了每一步怎么做

    SQL 也是种编程语言,是一种典型的声明式编程。声明式编程的特点是,只交待做什么,但无须交待怎么做

    操作符的本质是声明式编程

    下面回到我们最初的问题上来。你之所以用不惯 RxJava 操作符,是因为你习惯性地使用命令式编程思维 来理解实际上是声明式编程的操作符。 学习操作符,就和你在大学里接受的 SQL 语句一样理所当然。

    SQL 你是理解的,就是按一定的规则,向数据库中的数据声明你要做什么。

    SQL 代码示例

    同理,RxJava 也是按一定的规则,向数据流声明你要做什么。

    操作符伪代码示例

    转换成代码,便成为以下这样。

    Observable.just(1, 3, 5, 7, 9)
        .map(i -> i + 1)
        .filter(i -> i < 5)
        .subscribe(getObserve());
    

    这样说,你理解了吗?

    请点赞 ~

    全套操作符示例代码 https://github.com/KunMinX/RxJava2-Operators-Sample

    4 条回复    2019-04-23 16:16:54 +08:00
    chendy
        1
    chendy  
       2019-04-23 15:27:04 +08:00
    没用过 rx,只玩过 reactor ( spring webflux )
    感觉…
    还是携程比较香
    wupher
        2
    wupher  
       2019-04-23 15:38:06 +08:00
    最开始用 RxJava,
    后面改 WebFlux,
    感觉...
    是的,楼上没错,Kotlin coroutines 确实是最香的,基本上把 golang 复制了。
    Tiande
        3
    Tiande  
       2019-04-23 15:50:16 +08:00 via iPad
    这不是 lambda 吗
    hangszhang
        4
    hangszhang  
       2019-04-23 16:16:54 +08:00
    已关注公众号,等更新
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1885 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:00 · PVG 08:00 · LAX 16:00 · JFK 19:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.