你用不慣 RxJava,只因缺了這把鑰匙

KunMinX發表於2019-04-18

前言

本文最初是為部門內部培訓而準備的,但經過一番調研發現,同事們用不慣 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());
複製程式碼

這樣說,你理解了嗎?

請點贊 ~

全套操作符示例程式碼

github.com/KunMinX/RxJ…

相關文章