7.8 编程思想
链式编程
特点
- 是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
- 方法的返回值是block,block必须有返回值(对象本身),block参数(需要操作的值)
- 示例
@class Calculator;
typedef Calculator * (^addBlock)(int);
typedef Calculator * (^subBlock)(int);
typedef Calculator * (^mulBlock)(int);
typedef Calculator * (^diviBlock)(int);
@interface Calculator : NSObject
- (addBlock)add;
- (subBlock)sub;
- (mulBlock)mul;
- (diviBlock)divi;
@interface Calculator()
@property (assign , nonatomic)int currNum;
@end
@implementation Calculator
- (addBlock)add
{
return ^(int a){
self.currNum += a;
NSLog(@"result=%d",self.currNum);
return self;
};
}
- (subBlock)sub{
return ^(int a){
self.currNum -= a;
NSLog(@"result=%d",self.currNum);
return self;
};
}
- (mulBlock)mul{
return ^(int a){
self.currNum *= a;
NSLog(@"result=%d",self.currNum);
return self;
};
}
- (diviBlock)divi{
return ^(int a){
self.currNum /= a;
NSLog(@"result=%d",self.currNum);
return self;
};
}
Calculator * ca = [[Calculator alloc] init];
ca.add(10).sub(1).mul(9).divi(9);
@end
函数编程
特点
- 函数式编程思想:是把操作尽量写成一系列嵌套的函数或者方法调用。
- 函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)
- 代表:ReactiveCocoa。
- 用函数式编程实现,写一个加法计算器,并且加法计算器自带判断是否等于某个值.
- 示例
#import
@class CaculatorMaker;
@interface NSObject (CaculatorMaker)
//计算
+ (int)makeCaculators:(void(^)(CaculatorMaker *make))caculatorMaker;
@end
#import "NSObject+CaculatorMaker.h"
#import "CaculatorMaker.h"
@implementation NSObject (CaculatorMaker)
//计算
+ (int)makeCaculators:(void(^)(CaculatorMaker *make))block
{
CaculatorMaker *mgr = [[CaculatorMaker alloc] init];
block(mgr);
return mgr.iResult;
}
@end
@interface CaculatorMaker : NSObject
@property (nonatomic, assign) int iResult;
//加法
- (CaculatorMaker *(^)(int))add;
//减法
- (CaculatorMaker *(^)(int))sub;
//乘法
- (CaculatorMaker *(^)(int))muilt;
//除法
- (CaculatorMaker *(^)(int))divide;
@end
#import "CaculatorMaker.h"
@implementation CaculatorMaker
- (CaculatorMaker *(^)(int))add
{
return ^(int value)
{
_iResult += value;
return self;
};
}
@end
//调用
int iResult = [NSObject makeCaculators:^(CaculatorMaker *make) {
make.add(1).add(2).add(3).divide(2);
}];
响应式编程
特点
- 响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生了一个事件,会影响很多东西,这些事件就像流一样传播出去,然后影响结果,借用面向对象的一句话,万物皆是流,
- 代表:KVO
网友评论