編程思想

最近一直在忙,也好久沒有動手寫簡書了,今天心血來潮寫一篇吧。

先簡單介紹下已知的編程思想.

面向對象 :常用的面向對象編程語言有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。
這就是基于鏈式編程思想實現的簡單加減運算。

千里之行,始于足下。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容