你用不慣 RxJava,只因缺了這把鑰匙(推薦)
前言
本文最初是為部門內(nèi)部培訓(xùn)而準(zhǔn)備的,但經(jīng)過(guò)一番調(diào)研發(fā)現(xiàn),同事們用不慣 RxJava,并不是因?yàn)榫W(wǎng)上介紹 “怎么用” 的教程不夠多,恰恰是因?yàn)?,一上?lái)就急著發(fā)車的教程無(wú)數(shù)、卻從未有過(guò)哪篇教程 舍得用幾句話的功夫點(diǎn)破 RxJava 操作符究竟為何方神圣、我們?yōu)槭裁匆谩槭裁匆菢佑谩?/p>
Observable.just(1, 3, 5, 7, 9) .map(i -> i + 1) .filter(i -> i < 5) .subscribe(getObserve());
事實(shí)上,在相當(dāng)長(zhǎng)的一段時(shí)間里,我也和大部分人一樣,只知道使用 RxJava 來(lái)完成異步回調(diào),至于那些操作符,則是能不用盡量不用,因?yàn)椴恢篮J里賣的什么藥,看不懂、不會(huì)用。
因此,本文的初衷絕不是翻譯官方文檔、教大家怎么用,而是旨在幫助大家對(duì) RxJava 操作符 完成感性上的認(rèn)識(shí)。鑒于本次培訓(xùn)的效果還不錯(cuò)、同事們聽(tīng)了都說(shuō)好,我便在 GitHub 開源了全套操作符示例代碼(不要慌,鏈接文末已給出)。如果你在閱讀本文后覺(jué)得恍然大悟,原來(lái) RxJava 操作符是這么回事,那么我的愿望也就達(dá)到了。
編程語(yǔ)言包含多種編程范式
我對(duì)操作符本質(zhì)的頓悟,始于我對(duì)編程語(yǔ)言的理解。和你一樣,我是做安卓開發(fā),但有一天,我決定跳出 Java,從整個(gè)計(jì)算機(jī)科學(xué)的角度來(lái)學(xué)習(xí)和理解編程語(yǔ)言的本質(zhì),在這過(guò)程中,我接觸了“編程范式”這個(gè)概念,了解到原來(lái)每個(gè)編程語(yǔ)言大都包含多種編程范式。
常見(jiàn)的編程范式有:命令式編程、聲明式編程等。
以 Java 為例,咱們 Java 最主要的編程范式是命令式編程。命令式編程 即按順序執(zhí)行具體的命令,這些命令不僅交待了做什么,還詳細(xì)交待了每一步怎么做。
SQL 也是種編程語(yǔ)言,是一種典型的聲明式編程。聲明式編程的特點(diǎn)是,只交待做什么,但無(wú)須交待怎么做。
操作符的本質(zhì)是聲明式編程
下面回到我們最初的問(wèn)題上來(lái)。你之所以用不慣 RxJava 操作符,是因?yàn)槟懔?xí)慣性地使用命令式編程思維 來(lái)理解實(shí)際上是聲明式編程的操作符。
學(xué)習(xí)操作符,就和你在大學(xué)里接受的 SQL 語(yǔ)句一樣理所當(dāng)然。
SQL 你是理解的,就是按一定的規(guī)則,向數(shù)據(jù)庫(kù)中的數(shù)據(jù)聲明你要做什么。
同理,RxJava 也是按一定的規(guī)則,向數(shù)據(jù)流聲明你要做什么。
轉(zhuǎn)換成代碼,便成為以下這樣。
Observable.just(1, 3, 5, 7, 9) .map(i -> i + 1) .filter(i -> i < 5) .subscribe(getObserve());
這樣說(shuō),你理解了嗎?
全套操作符示例代碼
以上所述是小編給大家介紹的RxJava操作符詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android基于名稱、修改時(shí)間、大小實(shí)現(xiàn)文件夾排序
這篇文章主要為大家詳細(xì)介紹了Android基于名稱、修改時(shí)間、大小實(shí)現(xiàn)文件夾排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09Android 監(jiān)聽(tīng)手機(jī)GPS打開狀態(tài)實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 監(jiān)聽(tīng)手機(jī)GPS打開狀態(tài)實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05微信瀏覽器彈出框滑動(dòng)時(shí)頁(yè)面跟著滑動(dòng)的實(shí)現(xiàn)代碼(兼容Android和IOS端)
小編在做微信開發(fā)的時(shí)候遇到微信瀏覽器彈出框滑動(dòng)時(shí)頁(yè)面跟著滑動(dòng)的效果,下面把關(guān)鍵代碼分享給大家,需要的朋友參考下2016-11-11Android實(shí)現(xiàn)一個(gè)完美的倒計(jì)時(shí)功能
在Adroid應(yīng)用中,倒計(jì)時(shí)的功能使用的很多,例如點(diǎn)擊獲取短信驗(yàn)證碼之后的倒計(jì)時(shí)等等,這篇文章主要給大家介紹了關(guān)于利用Android如何實(shí)現(xiàn)一個(gè)完美的倒計(jì)時(shí)功能的相關(guān)資料,需要的朋友可以參考下2021-11-11超實(shí)用的android網(wǎng)絡(luò)工具類
這篇文章主要為大家詳細(xì)介紹了超實(shí)用的android網(wǎng)絡(luò)工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04android實(shí)現(xiàn)簡(jiǎn)易登錄注冊(cè)界面及邏輯設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡(jiǎn)易登錄注冊(cè)界面及邏輯設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Android之RecyclerView實(shí)現(xiàn)時(shí)光軸效果示例
本篇文章主要介紹了Android之RecyclerView實(shí)現(xiàn)時(shí)光軸效果,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Flutter獲取ListView當(dāng)前正在顯示的Widget信息(應(yīng)用場(chǎng)景)
ListView是Flutter里最常用的Widget了,當(dāng)屏幕放不下的時(shí)候,它可以自帶滾動(dòng)功能,用法也很簡(jiǎn)單,本文通過(guò)實(shí)例代碼給大家介紹Flutter獲取ListView當(dāng)前正在顯示的Widget信息,感興趣的朋友一起看看吧2022-05-05