歡迎**。
一、鏈式程式設計
所謂的鏈式程式設計就是可以通過"點"語法,將需要執行的**塊連續的書寫下去,使得**簡單易讀,書寫方便。在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...