链式编程和函数式编程学习笔记

链式编程

链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。

OC中,可以利用block实现链式编程。

方法的返回值是blockblock必须有返回值(本身对象),block参数(需要操作的值)

定义如下:

- (returnType (^)(parameterTypes)function;

实现:

1
2
3
4
5
6
7
8
9
10
11
- (returnType(^)(parameterTypes))function{

return ^ returnType (parameterTypes){

/*
处理参数
*/

return self; // returnType 的类型为自身类型
};
}

具体代码参照峥吖的文章《最快让你上手ReactiveCocoa之基础篇》

在此将调用的代码列一下

1
2
3
4
int result = [NSObject makeCaculators:^(CaculatorMaker *maker) {
maker.add(1).add(2).sub(3).mult(10);

}];

实在是太帅了,刚看到的时候,一脸懵逼,很像js对吧 我们可以用自定义的实例接着做其他事,这样的调用像一条链子一样,一口气做完一个对象想做的所有事都可以。

函数式编程

它属于”结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。

详细说明,参照阮一峰的网络日志-函数式编程初探

12年呀,差距好大
举例来说,现在有这样一个数学表达式:

(1 + 2) * 3 - 4

传统的过程式编程,可能这样写:

var a = 1 + 2;

var b = a * 3;

var c = b - 4;

转换成响应式编程

add(1,2).multiply(3).subtract(4)

OC中的实现方法

每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)

定义如下:

- ( ClassType )function:(returnType (^)(parameterTypes)parameter;

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- ( ClassType )function1:(returnType (^)(parameterTypes)parameter{

// block 调用 一般传入全局变量
变量 = parameter(变量);

return self;
}
- ( ClassType )function2:(returnType (^)(parameterTypes)parameter{

// block 调用 一般传入全局变量
变量 = parameter(变量);

return self;
}

调用代码

1
2
3
4
5
6
7
8
9
10
11
12
ClassType class = [ClassType alloc]init];

[[class function1:^(parameterTypes){

// 逻辑处理
return ...;
}]function2:^(parameterTypes){

// 逻辑处理
// 在方法2 中可以使用方法1中得到的变量进行操作
return ...;
}];

对于函数式编程的思想,还不是太懂,在琢磨当中,借鉴了各位大神的博客,一一拜谢,理解比较浅,有错误的地方还望指正。顺便说一句ReactiveCocoa真NB,不断学习中。