1. 程式人生 > >函數響應式編程(FRP)思想-Callback風格

函數響應式編程(FRP)思想-Callback風格

south ont 限制 per ref filter 命令 src bind

ReactiveCocoa是IOS廣為使用的技術框架,而ReactiveCocoa的核心思想就FRP。FRP不同於JAVA的object-oriented和AOP,FRP能讓你的代碼像數學一樣簡潔,業務像流水一樣清晰流暢。

函數響應式編程

響應式編程思想為體,函數式編程思想為用。
技術分享圖片

響應式編程

例如,在命令式編程環境中, a:=b+c表示將表達式的結果賦給 a,而之後改變 b 或 c的值不會影響 a。但在響應式編程中,a的值會隨著 b或 c的更新而更新。

在響應式編程當中,a:=b+c聲明的是一種綁定關系。(a與b、c綁定起來了,所以b、c的變化會影響a,這也就是所謂【變化傳播】)

函數式編程

不產生副作用的函數稱為純函數
函數是一等公民=>高階函數
函數式編程抽取了很多常用操作,作為高階函數,比如map,filter,reduce。
有了這些函數,你的代碼將被大大簡化,也意味著你可以進行更加快速的開發,同時這些函數也幫助別人理解你的代碼。


Callback風格

客戶端開發一個主要組成部分就是監聽事件然後更新UI。如下圖所示
技術分享圖片

事件來源包括UI事件、網絡回調、生命周期回調,通知等等。更新UI往往需要依賴多個事件以及事件包含的數據。所以我們不得不引入共享狀態,如下圖所示
技術分享圖片為了與FRP區分,可以把這種編程風格叫做Callback風格。

Callback的缺點顯而易見:

The code to manage our state and to update our output is ALL over the place.

狀態的修改可能分布在很多地方,UI的更新也可能分布在很多地方。
狀態之間的組合以及相互影響。並且容易出現Bug,很有可能出現未考慮到的狀態組合。
變量式線程同步管理非常復雜。

FRP優勢:

可讀性

- 代碼邏輯更加集中

- 減少共享變量,減少出錯率

- 框架分步,流程清晰

復用性

- 豐富的高階函數

https://blog.csdn.net/fly1183989782/article/details/62053973

ReactiveCocoaRxSwift

iOS的開發上,Objective-C可以說既是一個巨大的成功,也是一個巨大的限制。Cocoa Touch提供的原生API本身就是目標當年的事件驅動和消息派發的GUI編程模型,並且專門為Objective-C這門類smalltalk的消息式OO語言設計的,更為尷尬的是iOS上沒有OS X上自帶的Data Binding。種種原因,導致Target-Acion,KVO,Notification,Apple式MVC架構才會一直成為iOS開發的主流。然而,做過開發的都知道,這套架構在大型App,尤其復雜是網絡請求和人機交互特別多的情況下,非常容易讓整個App架構變得難以維護。

Apple式的MVC,又稱為Massive View Controller,

函數響應式編程(FRP)思想-Callback風格