“高階函數(shù)”是函數(shù)式編程中的關(guān)鍵的知識(shí)。從維基百科的解釋來(lái)看,一個(gè)高階函數(shù)應(yīng)該達(dá)到以下的兩個(gè)要求:
在Objective-c中我們經(jīng)常使用block作為函數(shù)。我們不需要跋山涉水地去尋找“高階函數(shù)”,實(shí)際上,Apple為我們提供的Foundation庫(kù)中就有。考慮象下面這么簡(jiǎn)單的一個(gè)NSNumber 的數(shù)組:
NSArray * array = @[ @(1), @(2), @(3) ];
我們想要枚舉這個(gè)數(shù)組的內(nèi)容,利用數(shù)組元素來(lái)做些事情。
我們可以用一個(gè)NSArray的高階函數(shù)來(lái)代替for循環(huán)。代碼如下:
for (NSNumber *number in array) NSLog(@"%@",number);
。。。這個(gè)等同于下面的高階函數(shù):
[array enumerateObjectsUsingBlock:^(NSNumber *number, NSUInteger idx, BOOL *stop)
{
NSLog(@"%@",number);
}];
"為什么?","這代碼不是更多了嗎?".
好吧,確實(shí)是這樣,但這是通往函數(shù)式編程道路上的第一步:函數(shù)的啟蒙教育。就像上一章節(jié)所說(shuō)的,如何在只關(guān)注任務(wù)本身的前提下去完成任務(wù)?這只是為即將到來(lái)的便利付出的一點(diǎn)點(diǎn)代價(jià),相信我。
實(shí)際上,高階函數(shù)是很抽象的東西,我們所做的事情(命令式編程)基本上都可以用它來(lái)抽象。但Foundation中高階函數(shù)的程度很低,要了解更多,我們不得不借助開(kāi)源社區(qū)。
更多建議: