美文网首页
编程思想

编程思想

作者: _Joeyoung_ | 来源:发表于2017-08-08 15:58 被阅读135次

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

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

    面向对象 :常用的面向对象编程语言有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。
    这就是基于链式编程思想实现的简单加减运算。

    千里之行,始于足下。

    相关文章

      网友评论

          本文标题:编程思想

          本文链接:https://www.haomeiwen.com/subject/savtrxtx.html