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

2021-07-05 15:21:30 字數 3183 閱讀 4862

歡迎**。

一、鏈式程式設計

所謂的鏈式程式設計就是可以通過"點"語法,將需要執行的**塊連續的書寫下去,使得**簡單易讀,書寫方便。在jquery中早就有了這個概念。示例**:

var result = (new biginteger("31415926535")).multiply(new biginteger("4")).subtract(new biginteger("271828182")).val();

學習了這麼久的objective-c,雖然現在已經非常熟悉,但總是覺得objective-c的語法規則差強人意,所以我們可以自定義objective-c的鏈式程式設計。

鏈式程式設計的特點:

1. 方法的返回值是block。

2. 這個block必須有返回值,並且這個返回值就是物件本身;block也有輸入引數。

我們以簡單的四則運算為例,定義乙個類叫做calculatormaker的類。根據上面的鏈式程式設計的特點,可以書寫出 calculatormaker.h 檔案的**:

@inte***ce calculatormaker : nsobject

@property (nonatomic, assign) int result;

- (calculatormaker *(^)(int))add;

- (calculatormaker *(^)(int))sub;

- (calculatormaker *(^)(int))multi;

- (calculatormaker *(^)(int))divide;

@end

其中,result屬性就是最終運算之後的結果。然後書寫calculatormaker.m 檔案的**:

#import "calculatormaker.h"

@implementation calculatormaker

- (calculatormaker *(^)(int))add ;

}- (calculatormaker *(^)(int))sub ;

}- (calculatormaker *(^)(int))multi ;

}- (calculatormaker *(^)(int))divide ;

}@end

calculatormaker類算是書寫完畢了,但是此時我們缺少乙個類似"工廠加工"的東西,用來建立calculatormaker物件。而四則運算是可以使用在任意物件上面的,所以我們可以編寫乙個nsobject物件的分類,用來建立calculatormaker物件,並且返回最終計算結果。

nsobject分類**如下:

@inte***ce nsobject (calculator)

+ (int)calculate:(void (^)(calculatormaker *maker))calculator;

@end

@implementation nsobject (calculator)

+ (int)calculate:(void (^)(calculatormaker *))calculator

@end

然後我們就可以呼叫自己編寫的鏈式程式設計器來書寫**了,如:

int result = [nsobject calculate:^(calculatormaker *maker) ];

nslog(@"result:%d", result);

可以看出,呼叫的時候,**一目了然,非常清晰。

**剖析:

1. ^(caculatormaker *maker) ]; 

傳遞乙個block給calculate方法,在calculate方法中建立乙個caculatormaker物件,然後作為輸入引數傳遞給block的maker,這個block內部進行相應的計算工作,即步奏2所作的工作。最後呼叫return maker.result;將計算結果返回。

2. maker.add這個方法獲取在add中定義的block:

^(int num);

然後傳遞引數1給block中的num,再進行計算工作,最後將這個block整體返回回去,然後重複呼叫後面的add和divide方法。

鏈式程式設計的代表:masonry框架。

二、函式式程式設計

所謂的函式式程式設計就是當物件呼叫完乙個函式之後,返回的還是這個物件本身,緊接著又可以繼續呼叫此函式或者物件中定義的其他函式。

自定義函式式程式設計:

1. calculate方法可以完成任何的數**算。

2. equal方法用來比較第一步計算的結果與某個值是否相等。

calculator.h 檔案:

@inte***ce calculator : nsobject

@property (nonatomic, assign) int result;

- (calculator *)calculate:(int (^)(int result))calculate;

- (bool)equal:(bool (^)(int result))operation;

@end

calculator.m 檔案:

@implementation calculator

- (calculator *)calculate:(int (^)(int result))calculate

- (bool)equal:(bool (^)(int result))operation

@end

函式式程式設計呼叫:

calculator *calc = [[calculator alloc] init];

bool isequal = [[calc calculate:^int(int result) ] equal:^bool(int result) ];

nslog(@"isequal:%d", isequal);

**剖析:

1. calculate方法中可以完成自己想要的計算,得出結果並且返回calculator物件。

2. 用返回的calculator例項物件緊接著呼叫equal方法完成判等操作。

函式式程式設計的代表:reactivecocoa框架。

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

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

XZ iOS之函式式程式設計和鏈式程式設計

函式式程式設計 物件呼叫方法 返回這個物件本身 然後再去呼叫另乙個方法 呼叫完返回的還是這個物件本身.鏈式程式設計 通過 點 語法去呼叫方法,使用 即block 的方式呼叫方法,如果要實現函式式程式設計,需要返回 block masonry 是函式式程式設計和鏈式程式設計的 經典代表 uiview ...

函式式程式設計與建構函式結合實現鏈式呼叫

js部分 簡易的鏈式呼叫框架 要點 1.框架主體以函式式程式設計為核心 2.輔以建構函式原型鏈實現鏈式呼叫 注意 在鏈式呼叫過程中,始終有乙個值是從傳入,到最後終止鏈式時,一直變化,在此例中這個值就為this.wrap,其伴隨整個過程 function root this.wrap wrap cha...