21 Star 93 Fork 30

KevinHM / FunctionalReactiveProgrammingOniOS

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Higher_Order_Functions.md 1.54 KB
一键复制 编辑 原始数据 按行查看 历史
KevinHM 提交于 2015-08-14 10:16 . (っ˘▽˘)っ :cloud:⊂(◕。◕⊂)

高阶函数

函数式编程的一个关键的概念是"高阶函数"。从维基百科的解释来看,一个高阶函数需要满足下面两个条件:

  • 一个或者多个函数作为输入。
  • 有且仅有一个函数输出。

在Objective-c中我们经常使用block作为函数。我们不需要跋山涉水地去寻找‘高阶函数’,实际上,Apple为我们提供的Foundation库中就有。考虑象下面这么简单的一个NSNumber 的数组:

 NSArray * array = @[ @(1), @(2), @(3) ];

我们想要枚举这个数组的内容,利用数组元素来做些事情。

“好吧”,你说, “我将写一个for循环~”

住手吧,伙计,停止写for循环,好好看看我之前说的,我们可以用一个NSArray的高阶函数来代替。代码如下:

for (NSNumber *number in array) NSLog(@"%@",number);

。。。这个等同于下面的高阶函数:

[array enumerateObjectsUsingBlock:^(NSNumber *number, NSUInteger idx, BOOL *stop)
{
    NSLog(@"%@",number);
}];

"为什么?","这代码不是更多了吗?".

好吧,确实是这样,但这是通往函数式编程道路上的第一步:函数的启蒙教育。就像上一章节所说的,如何在只关注任务本身的前提下去完成任务?这只是为即将到来的便利付出的一点点代价,相信我。

实际上,高阶函数是很抽象的东西,我们所做的事情(命令式编程)基本上都可以用它来抽象。但Foundation中高阶函数的程度很低,要了解更多,我们不得不借助开源社区。

Objective-C
1
https://gitee.com/DarkHorse1919/FunctionalReactiveProgrammingOniOS.git
git@gitee.com:DarkHorse1919/FunctionalReactiveProgrammingOniOS.git
DarkHorse1919
FunctionalReactiveProgrammingOniOS
FunctionalReactiveProgrammingOniOS
master

搜索帮助