最近一直在忙,也好久没有动手写简书了,今天心血来潮写一篇吧。
先简单介绍下已知的编程思想.
面向对象
:常用的面向对象编程语言有JavaScript、PHP、Java、Objective-C、C#、C++等,是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。总结成一句话就是万物皆对象.
面向过程
:是一种以过程为中心的编程思想。处理事情以过程为核心,一步一步的实现。
响应式编程思想
:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。
代表
:KVO应用
函数式编程思想
:是把操作尽量写成一系列嵌套的函数。
函数式编程特点
:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)
代表
:ReactiveCocoa框架。
为了加深大家的理解,以函数式编程实现一个demo。
首先创建一个计算的管理者(SumManager),根据函数式编程思想方法的返回值是对象本身,block作为参数的特点定义方法。在方法实现中调用block。
@interface SumManager : NSObject
/** 结果 */
@property(nonatomic,assign) NSInteger result;
//计算
- (instancetype)manager:(NSInteger(^)(NSInteger))sumBlock;
@end
@implementation SumManager
- (instancetype)manager:(NSInteger(^)(NSInteger))sumBlock
{
_result = sumBlock(_result);
return self;
}
@end
在viewController中使用如下:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
SumManager * mgr = [[SumManager alloc] init];
NSInteger sumResult = [[mgr manager:^NSInteger(NSInteger result) {
result += 10;
result *= 2;
return result;
}] result];
NSLog(@"函数式编程计算结果:%ld",sumResult);
}
@end
控制台打印结果:
2017-08-08 15:42:50.933 Demo[34168:835891] 函数式编程计算结果:20
下面来讲一下链式编程吧
链式编程思想
:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。例如:add(10).add(20).reduce(10)
链式编程特点
:方法的返回值是block,block必须有返回值(方法调用者),block参数(需要操作的值)
代表
:masonry框架。
下面以链式编程思想为例实现简单的加减运算:
首先创建一个计算的管理者(SumManager),根据链式编程思想方法的返回值是block,block返回值是方法调用者的特点定义两个方法。让管理者(SumManager)去操作具体的 加 和 减 方法,保存结果值。
@interface SumManager : NSObject
/** 结果 */
@property(nonatomic,assign) NSInteger result;
- (SumManager *(^)(NSInteger))add;
- (SumManager *(^)(NSInteger))reduce;
@end
@implementation SumManager
//加
- (SumManager *(^)(NSInteger))add
{
return ^(NSInteger value){
_result += value;
return self;
};
}
//减
- (SumManager *(^)(NSInteger))reduce
{
return ^(NSInteger value){
_result -= value;
return self;
};
}
@end
然后创建NSObject的分类 NSObject+sum ,在类中定义一个类方法,好处在于任何基于NSObject的类都可以直接[类名 方法],简单省事。
@interface NSObject (sum)
+ (NSInteger)qy_makeConstraints:(void(^)(SumManager *))block;
@end
@implementation NSObject (sum)
+ (NSInteger)qy_makeConstraints:(void(^)(SumManager *))block
{
SumManager *mgr = [[SumManager alloc] init];
block(mgr);
return mgr.result;
}
@end
在viewController中使用如下:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSInteger result = [NSObject qy_makeConstraints:^(SumManager *mgr) {
mgr.add(10).add(20).reduce(10);
}];
NSLog(@"链式编程计算结果:%ld",result);
}
@end
控制台打印结果:
2017-08-08 15:56:44.108 Demo[34168:835891] 链式编程计算结果:20
最终看到控制台打印计算结果为20。
这就是基于链式编程思想实现的简单加减运算。
千里之行,始于足下。
网友评论