最近一直在忙,也好久沒有動手寫簡書了,今天心血來潮寫一篇吧。
先簡單介紹下已知的編程思想.
面向對象
:常用的面向對象編程語言有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。
這就是基于鏈式編程思想實現的簡單加減運算。
千里之行,始于足下。