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

前言

本文最初是爲部門內部培訓而準備的,但經過一番調研發現,同事們用不慣 RxJava,並不是因爲網上介紹 “怎麼用” 的教程不夠多,恰恰是因爲,一上來就急着發車的教程無數、卻從未有過哪篇教程 捨得用幾句話的功夫點破 RxJava 操作符究竟爲何方神聖、我們爲什麼要用、爲什麼要那樣用。

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

事實上,有相當長的一段時間,我也和大部分人一樣,只知道使用 RxJava 來完成異步回調,至於那些操作符,則是能不用盡量不用,因爲不知道葫蘆裏賣的什麼藥,看不懂、不會用。

因此,本文的初衷絕不是翻譯官方文檔、教大家怎麼用,而是旨在幫助大家對 RxJava 操作符 完成感性上的認識。鑑於本次培訓的效果還不錯、同事們聽了都說好,我便在 GitHub 開源了全套操作符示例代碼(不要慌,鏈接文末已給出)。如果你在閱讀本文後覺得恍然大悟,原來 RxJava 操作符是這麼回事,那麼我的願望也就達到了。

編程語言包含多種編程範式

我對操作符本質的頓悟,始於我對編程語言的理解。和你一樣,我是做安卓開發,但有一天,我決定跳出 Java,從整個計算機科學的角度來學習和理解編程語言的本質,在這過程中,我接觸了“編程範式”這個概念,瞭解到原來每個編程語言大都包含多種編程範式。

常見的編程範式有:命令式編程、聲明式編程等。

以 Java 爲例,咱們 Java 最主要的編程範式是命令式編程。命令式編程 即按順序執行具體的命令,這些命令不僅交待了做什麼,還詳細交待了每一步怎麼做。

SQL 也是種編程語言,是一種典型的聲明式編程。聲明式編程的特點是,只交待做什麼,但無須交待怎麼做。

操作符的本質是聲明式編程

下面回到我們最初的問題上來。你之所以用不慣 RxJava 操作符,是因爲你習慣性地使用命令式編程思維 來理解實際上是聲明式編程的操作符。
學習操作符,就和你在大學裏接受的 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章