記得首次接觸到
函數(shù)響應(yīng)式編程
是在學(xué)習(xí)OC開源框架RAC(ReactiveCocoa)的時(shí)候炼列,知道RAC是函數(shù)式+響應(yīng)式編程結(jié)合氢惋,那么我們首先就得去理解何為函數(shù)響應(yīng)式編程FRP
菱农。
函數(shù)式編程
維基百科對函數(shù)式編程的解釋:在計(jì)算機(jī)科學(xué)里,函數(shù)式編程是一種編程范式的妖,它將計(jì)算描述為表達(dá)式求值并避免了狀態(tài)和數(shù)據(jù)改變嫂粟。函數(shù)式編程幾個(gè)重要的特性:純函數(shù)無副作用、不變的數(shù)據(jù)、高階函數(shù)、流計(jì)算模式兼贸、尾遞歸、柯里化等。函數(shù)式編程中的“函數(shù)”可以簡單的理解成數(shù)學(xué)中的函數(shù)蹂楣。學(xué)過高等數(shù)學(xué)的都知道肄扎,函數(shù)一般定義為:y=f(x),很明顯它有幾個(gè)特點(diǎn):有至少一個(gè)輸入搔耕,至少一個(gè)輸出,輸入相同時(shí)輸出相同痰娱。
純函數(shù)無副作用是指從業(yè)務(wù)領(lǐng)域角度來看弃榨,函數(shù)值僅僅取決于輸入(及內(nèi)部變量),計(jì)算過程中沒有副作用產(chǎn)生梨睁,函數(shù)執(zhí)行多次和執(zhí)行一次對業(yè)務(wù)領(lǐng)域產(chǎn)生的作用相同鲸睛。副作用是指除了返回函數(shù)值以外的其他結(jié)果,例如修改全局變量坡贺。純函數(shù)既不依賴外部的狀態(tài)也不修改外部的狀態(tài)官辈。
不變的數(shù)據(jù)是指變量的值是不可變的。比如命令式編程時(shí)遍坟,定義一個(gè)整型變量x钧萍,可以多次賦值動(dòng)作,例如執(zhí)行x=1,x=2,x=3,x=4一系列操作之后政鼠,x最終值是4风瘦。而函數(shù)式編程中,變量一旦賦值公般,則不允許修改万搔。這一點(diǎn)跟高等數(shù)學(xué)中的代數(shù)很像,估計(jì)對于數(shù)學(xué)家來說官帘,1和2是兩個(gè)不同的變量瞬雹,是不可以把1和2相互賦值的。
高階函數(shù)就是函數(shù)的函數(shù)刽虹。簡單點(diǎn)來說就是酗捌,輸入是一個(gè)函數(shù),輸出也是一個(gè)函數(shù)涌哲。在數(shù)學(xué)中它們也叫做算子(運(yùn)算符)或泛函胖缤。函數(shù)是對自變量的映射,高階函數(shù)是對函數(shù)的映射阀圾。
響應(yīng)式編程
響應(yīng)式編程更像是一種設(shè)計(jì)思想或者設(shè)計(jì)目標(biāo)哪廓。響應(yīng)式編程的目標(biāo)通常是程序或應(yīng)用具有響應(yīng)能力:可相應(yīng)的、彈性初烘、伸縮性涡真、消息驅(qū)動(dòng)分俯。彈性是面對失敗的相應(yīng);伸縮性是在不同負(fù)載情況下的響應(yīng)哆料;消息驅(qū)動(dòng)是指松耦合性缸剪,通過異步消息隔離上下文。響應(yīng)式編程最重要的思想就是圍繞失敗來做設(shè)計(jì)东亦,并提升模型的綜合彈性杏节。按照我的理解響應(yīng)式模型一定是有響應(yīng)的,不管是正常的還是異常的讥此,當(dāng)然這一點(diǎn)仁者見仁智者見智拢锹。響應(yīng)式編程是一種關(guān)于數(shù)據(jù)流和變化傳播的聲明式編程范例,簡單點(diǎn)來說就是程序?qū)Ξ惒绞录M(jìn)行相應(yīng)的處理萄喳。
為什么要使用函數(shù)響應(yīng)式編程
- 在開發(fā)過程中卒稳,狀態(tài)以及狀態(tài)之間依賴過多,
RxSwift
更加有效率的處理事件流他巨,而無需顯式的去管理狀態(tài)充坑,在OO編程或者過程式編程中,狀態(tài)的變化是很難跟蹤的染突,這也是最重要的一點(diǎn)捻爷; - 減少變量的使用,由于它跟蹤狀態(tài)和值的變化份企,因此需要不斷地觀察狀態(tài)和更新值也榄;
- 提供比較統(tǒng)一的消息傳遞機(jī)制,將
OC
中的通知
司志、action
甜紫、KVO
以及其他所有UIControl
事件的變化都進(jìn)行監(jiān)控,當(dāng)變化發(fā)生時(shí)骂远,就會(huì)傳遞事件和值囚霸; - 當(dāng)值隨著事件變換時(shí),可以使用
map
激才、filter
拓型、reduce
等函數(shù)便利地對值進(jìn)行變換操作
RxSwift
隨之,咱們的主角就上場了瘸恼,RxSwift
是Swift
的一套響應(yīng)式編程框架劣挫,對于RxSwif
是一套超重量級的核心框架,使用RxSwift
解決問題钞脂,就不需要考慮調(diào)用順序揣云,直接考慮結(jié)果,把每一次操作都寫成一系列嵌套的方法中冰啃,使代碼高聚合邓夕,方便管理,還希望可以多加揣摩和學(xué)習(xí)阎毅。