编程思想

最近一直在忙,也好久没有动手写了,今天心血来潮写一篇吧。

先简单介绍下已知的编程思想.

面向对象 :常用的面向对象编程语言有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框架。

编程思想_第1张图片

下面以链式编程思想为例实现简单的加减运算:

首先创建一个计算的管理者(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。
这就是基于链式编程思想实现的简单加减运算。

千里之行,始于足下。

你可能感兴趣的:(编程思想)