函數響應式編程(FRP)思想-Callback風格
序
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
ReactiveCocoa和RxSwift
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風格