国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 什么是響應(yīng)式編程,Combine, RxJS, RxSwift背后的理論基礎(chǔ)?

什么是響應(yīng)式編程,Combine, RxJS, RxSwift背后的理論基礎(chǔ)?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-11 20:13:41 1697026421

一、響應(yīng)式編程

響應(yīng)式編程使用三個核心概念:數(shù)據(jù)流,函數(shù)式編程和異步觀察。

數(shù)據(jù)流 Data Streams:比如一個 Timer 每隔 1 秒發(fā)布一個數(shù),這個數(shù)依次遞增 。那么這個 Timer 就可以是一個發(fā)布者 Publisher。它發(fā)布的內(nèi)容就會形成一個數(shù)據(jù)流。好像這樣:1 – 2 – 3 – 4 – …..函數(shù)式編程 Functional Programming:有了這個數(shù)據(jù)流你需要一個一個數(shù)據(jù)的處理吧,這是你你不是把它當(dāng)成一個 Array 來處理,因為數(shù)據(jù)是一個一個來的,你不知道它的終點在哪。因此你自己制定一些標(biāo)準(zhǔn)來篩選想要的。比如你想篩選偶數(shù)來做下一步處理,就用 .filter { return value % 2 == 0 }。這么一操作就把偶數(shù)留下來了,其余的數(shù)據(jù)全部不用。而這個處理數(shù)據(jù)的思路就是函數(shù)式編程的思想。異步觀察 Asynchronous Observers:這些處理好的數(shù)據(jù)給誰聽呢?這里正是 Subscriber 來聽。比如你想沒兩秒更改一次 UI 上面的圖標(biāo),顯示遞增的偶數(shù)。那么就會訂閱上面那個 Publisher,然后把它處理出來的數(shù)據(jù)更新到 UI 的 Label 上面。

區(qū)分一下指令時編程和函數(shù)式編程。指令式編程就是我們熟悉的 if else 一步一步來。而函數(shù)式編程則是把功能提出來,不和數(shù)據(jù)本身的類型掛鉤。比如 Filter 函數(shù),就是篩選滿足某種條件的數(shù)據(jù)。而響應(yīng)式編程是什么呢?其實是對數(shù)據(jù)的處理,處理后發(fā)送給訂閱者。

因此你也可以理解成響應(yīng)式編程是對數(shù)據(jù)做出反饋,而這里判斷數(shù)據(jù)的時候就用到了函數(shù)式編程的思想。為什么響應(yīng)式編程使用了函數(shù)式編程的核心思想呢?主要是因為函數(shù)式編程是 Stateless 的,因此不會有副作用。而響應(yīng)式編程想處理的就是數(shù)據(jù)流,所以也有人把響應(yīng)式編程叫做數(shù)據(jù)流編程。

「響應(yīng)式」這三個字描述的是我們的對數(shù)據(jù)流的處理方式,對數(shù)據(jù)變化作出響應(yīng)。「函數(shù)式」指的是處理數(shù)據(jù)的編程方法,描述你想保留刪選或者如何變更數(shù)據(jù)。「函數(shù)式」是「描述式」編程的一種體現(xiàn)。

這里我覺得蘋果 Combine 響應(yīng)式框架的解釋很好,放在這里你感受一下。

The Combine framework provides a declarative Swift API for processing values over time. These values can represent many kinds of asynchronous events. Combine declares?publishers?to expose values that can change over time, and?subscribers?to receive those values from the publishers.

我大概翻譯一下:Combine 框架提供了描述式 API 用以處理數(shù)據(jù)流。這些數(shù)據(jù)可以代表多種異步事件。Combine 框架使用 Publisher 來講數(shù)據(jù)變更呈現(xiàn)出來;Subscriber 負(fù)責(zé)從發(fā)布者那里接受數(shù)據(jù)。

Combine 框架和 RxJava, RxJS, RxSwift 等一些列響應(yīng)式框架和原理是一樣的,因此你可以遠(yuǎn)離互通。下面的這些函數(shù)就是 Combine 框架 Publisher 函數(shù)的一些范例,你也可以把這些處理數(shù)據(jù)的函數(shù)叫做「函數(shù)式編程」。

延伸閱讀:

二、同步與異步

分布式網(wǎng)絡(luò)系統(tǒng)中,各個參與方節(jié)點的運行是相互獨立的,沒有共享內(nèi)存,沒有全局時鐘。各節(jié)點通過消息來進(jìn)行溝通。在傳統(tǒng)的理念中,我們會把這樣的網(wǎng)絡(luò)根據(jù)他們通信方式描述成同步和異步的。

同步(Synchronous)就是整個處理過程順序執(zhí)行,當(dāng)各個過程都執(zhí)行完畢,并返回結(jié)果。是一種線性執(zhí)行的方式,執(zhí)行的流程不能跨越。一般用于流程性比較強的程序,比如用戶登錄,需要對用戶驗證完成后才能登錄系統(tǒng)。異步(Asynchronous)則是只是發(fā)送了調(diào)用的指令,調(diào)用者無需等待被調(diào)用的方法完全執(zhí)行完畢;而是繼續(xù)執(zhí)行下面的流程。是一種并行處理的方式,不必等待一個程序執(zhí)行完,可以執(zhí)行其它的任務(wù),比如頁面數(shù)據(jù)加載過程,不需要等所有數(shù)據(jù)獲取后再顯示頁面。
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
什么是 GrapheneOS?

一、什么是 GrapheneOSGrapheneOS是一個基于安卓操作系統(tǒng)的安全和隱私增強版。它專注于提供用戶隱私、安全性和安全更新方面的保護,是一個開源...詳情>>

2023-10-11 22:04:01
一款好的APP應(yīng)該是什么樣子?

一、好的APP具備的特點1、直觀易用用戶界面應(yīng)該簡潔明了,操作邏輯清晰,使用戶能夠快速上手并自如地進(jìn)行操作。良好的用戶體驗是一款成功的APP...詳情>>

2023-10-11 21:33:38
python的五個特點?

一、簡潔易讀的語法Python以簡潔易讀而著稱。它采用了一種簡單而直觀的語法,使得代碼具有高度的可讀性,降低了學(xué)習(xí)和理解的難度。Python使用縮...詳情>>

2023-10-11 21:23:04
區(qū)塊鏈技術(shù)在醫(yī)療領(lǐng)域有沒有什么可以應(yīng)用的場景?

一、區(qū)塊鏈技術(shù)在醫(yī)療領(lǐng)域的應(yīng)用區(qū)塊鏈在醫(yī)療領(lǐng)域的應(yīng)用前景廣泛,國內(nèi)外各機構(gòu)都在積極探索區(qū)塊鏈在醫(yī)療領(lǐng)域的多方面應(yīng)用。主要應(yīng)用方向包括醫(yī)...詳情>>

2023-10-11 21:17:44
Java并發(fā)編程需要掌握什么?

一、Java并發(fā)編程需要掌握的內(nèi)容1、線程基礎(chǔ)知識了解線程的概念、生命周期和狀態(tài)轉(zhuǎn)換,以及如何創(chuàng)建和管理線程。熟悉Java中的Thread類和Runnabl...詳情>>

2023-10-11 21:08:03