RxJS系列教程(三) RxJS與函數(shù)式編程

可以這么說,響應(yīng)式編程是繼承自函數(shù)式編程。從Rx的官網(wǎng)上我們看到這樣的定義:

RxJS是結(jié)合了觀察者模式,迭代器模式和函數(shù)式編程優(yōu)點(diǎn)的產(chǎn)物。

觀察者模式在前文中已經(jīng)出現(xiàn)過了,下面我們來看看函數(shù)式編程和迭代器模式。

函數(shù)式編程

函數(shù)式編程是一種開發(fā)軟件的范式,強(qiáng)調(diào)使用函數(shù)來創(chuàng)建應(yīng)用程序。聲明式的,不可變的,沒有副作用的是函數(shù)式編程的三大護(hù)法。

其中不可變武功最高深。一直使用面向?qū)ο蠓妒骄幊痰奈覀?,?xí)慣了用變量存儲(chǔ)和追蹤程序的狀態(tài)。然而我們?nèi)绾卧谧兞坎豢勺兊那闆r下來完成同樣的功能呢?這里舉個(gè)鐘表時(shí)間的例子,從早上7點(diǎn)到早上8點(diǎn),存儲(chǔ)時(shí)間的變量必然從7變成了8。用函數(shù)式的觀點(diǎn),不能改變變量的值,那如何追蹤時(shí)間的變化,那就每走一秒,我們就重新創(chuàng)建個(gè)鐘表,在程序中就是新創(chuàng)建個(gè)實(shí)例,最終,我們得到的結(jié)果都是指向8點(diǎn)的鐘表。

RxJS從函數(shù)式編程范式中借鑒了很多東西,比如鏈?zhǔn)胶瘮?shù)調(diào)用,惰性求值等等。

其他兩大護(hù)法,我們簡(jiǎn)單說一下。什么叫聲明式的語(yǔ)句,請(qǐng)參看SQL查詢語(yǔ)句的寫法。沒有副作用的,我們就看看什么是副作用:在函數(shù)中與函數(shù)作用域之外的一切事物有交互的就產(chǎn)生了副作用。比如讀寫文件,在控制臺(tái)打印語(yǔ)句,修改頁(yè)面元素的css等等。在RxJS中,把副作用問題推給了訂閱者來解決。其實(shí)副作用這個(gè)問題,大家早已熟悉了——編程中最忌諱的全局變量。說白了,共享的都是不安全的,尤其是在多線程,異步環(huán)境下,在這里就不多說了。函數(shù)式編程我會(huì)單開haskell系列來講。

迭代器模式

RxJS中一個(gè)關(guān)鍵的設(shè)計(jì)理念是遍歷機(jī)制。了解過迭代器設(shè)計(jì)模式的人應(yīng)該清楚,迭代器模式的主題思想就是不管要遍歷的數(shù)據(jù)結(jié)構(gòu)是什么,樹也好,圖也好,我們都用同樣的方式操作它們(for...of)。在ES6中引入了迭代器協(xié)議,具體內(nèi)容請(qǐng)參見http://es6.ruanyifeng.com/#docs/iterator。RxJS中的消費(fèi)者(observer)也實(shí)現(xiàn)了類似的協(xié)議用來通知生產(chǎn)者(observable)繼續(xù)發(fā)送數(shù)據(jù)。

數(shù)據(jù)驅(qū)動(dòng)開發(fā)

RxJS鼓勵(lì)使用數(shù)據(jù)驅(qū)動(dòng)的方式進(jìn)行開發(fā)。數(shù)據(jù)驅(qū)動(dòng)可以把數(shù)據(jù)和處理數(shù)據(jù)的行為分隔開來,這也是RxJS的核心設(shè)計(jì)決定,使我們可以用同樣的方式處理不同的數(shù)據(jù)源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容