ios 鏈式程式設計 函式式程式設計以及響應式程式設計

2021-08-11 04:21:54 字數 2329 閱讀 3744

我們如果在完成一件事情的時候,可能會需要有很多步驟,那我們其實就可以把這個步驟看成是乙個乙個的過程,然後再去組合起來,這樣會比較的清晰。就比如說學生要吃飯,讀書,跑步我們如果直接去呼叫方法的話是直接如以下步驟所示去呼叫的,這就是去實現吃飯,學習,跑步。這裡需要注意的是無引數的方法也是可以通過點的形式也就是 . 去呼叫的。

-(void)study

-(void)eat

-(void)run

去呼叫下面的方法

[student eat];

[student study];

[student run];

當然我們還可以這麼做也相當於是實現了鏈式儲存,但是這樣一直下去會不好去閱讀

-(student *)study

-(student *)eat

-(void)run

然後去呼叫

[[[student eat]study]run];
這個時候我們應該去用block來實現,雖然說免不了呼叫的方法次數較多,使得整行**較長,通過換行還能保持一定的閱讀性,還是會顯的很清晰。

-(student *(^)())study;}

-(student *(^)())run

;

}-(student *(^)())eat

;}

我們呼叫就可以直接通過點語法的方式去呼叫了,這裡的. 其實就相當於是獲取這個block,然後()就相當於是去呼叫

student.eat().study().run();
如果我們要攜帶引數的話需要在block中攜帶引數,如果直接在函式外面寫引數就無法再通過點語法就行呼叫了,所以我們應該這麼寫

-(student *(^)(nsstring * string))study

;}

其實masonry中就很好的用到了鏈式程式設計的思想。也就是說方法的返回值是block,block還有返回值

函式式的話其實就是你呼叫的**和你處理的業務邏輯在一起的話就是函式式,比如說你有乙個方法是有乙個block作為引數的,我們在block裡面寫我們要處理的邏輯**就是函式式程式設計。函式式程式設計的可讀性好的原因就是往方法中傳入了block,方法中巢狀block呼叫的話,其實就是把**聚合起來管理。

函式式程式設計的特點是每個方法必須有返回值(本身物件),把函式或者block當做引數。block可以作為引數也可以作為返回值。在函式式程式設計中,函式就是乙個管道,通過這個管道,進去乙個值和出來乙個值會存在一定的對映關係,就好比我們數學上的我們學的函式是一樣的,都是滿足了一定的規律才可以構成乙個函式

函式式程式設計有兩個最基本的運算:合成和柯里化

如果乙個值要經過多個函式,才能變成另外乙個值,就可以把所有中間步驟合併成乙個函式,這叫做函式的合成

f(x)和g(x)可以簡單的合成為f(g(x)),但是有乙個前提,就是f和g都只能接受乙個引數。如果可以接受多個引數,比如f(x, y)和g(a, b, c),函式合成就非常麻煩。

這時就需要函式柯里化了。柯里化,就是把乙個多引數的函式,轉化為單引數函式。舉個下面的例子比如說加法函式,轉換為單一引數的函式的例子

//原先的加法函式

func add(x:int,y:int)->int

//柯里化

如果是響應式程式設計的話其實就是和方法的實現有關的,也就是說我們去定義方法的時候只根據某些特定的條件去判斷呼叫那些**,就比如說afn中的如果成功的返回資料呼叫乙個block,如果是失敗又呼叫另外乙個block。也就是說在方法的內部實現不知道你**是如何實現的,只是知道返回什麼資料,給你響應你寫的**的執行。

kvo和通知和**其實都是響應式程式設計的體現。

只要我們定義的方法沒有引數就是乙個get方法就可以使用點語法。如果方法的返回值是block的,而且也不帶引數也可以用點語法,包括我們的類方法也是如此,類方法沒有引數的也可以用點語法完成,只是如果沒有返回值,會有下面的警告而已

鏈式程式設計與函式式程式設計

歡迎 一 鏈式程式設計 所謂的鏈式程式設計就是可以通過 點 語法,將需要執行的 塊連續的書寫下去,使得 簡單易讀,書寫方便。在jquery中早就有了這個概念。示例 var result new biginteger 31415926535 multiply new biginteger 4 subt...

iOS鏈式程式設計

nsinteger result adder.add 4 sub 1 mult 2 div 3 表示 4 1 2 3,是不是很方便很直觀。我們知道,如果是c 的實現話鏈式操作是很簡單的,因為c 的函式呼叫就是通過點操作呼叫的,只需要返回物件本身就可以實現鏈結了。但是oc就不行了,因為oc的點操作表示...

ios鏈式程式設計

首先我們看一下使用masonry對控制項進行布局的 格式。self.bottomview1 mas makeconstraints masconstraintmaker make 上邊這段 有特點 使用點語法 可以進行鏈式呼叫 那麼實現鏈式程式設計就需要解決上邊兩個問題。function.h imp...