链式编程初试

链式编程思想: 将多行操作通过 “.” 连接成一句代码, 使代码可读性好, 比如: a(1).b(2).c(3), 代表性的就是Masonry
链式编程特点: 方法的返回值是block, block必有返回值(自身对象), block参数(操作对象)

先简单介绍下目前咱们已知的编程思想。

1 面向过程:处理事情以过程为核心,一步一步的实现。

2 面向对象:万物皆对象

3 链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)

链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

代表:Masonry框架。

4 响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。

代表:KVO运用。
5 函数式编程思想:是把操作尽量写成一系列嵌套的函数或者方法调用。

函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)

代表:ReactiveCocoa。

用函数式编程实现,写一个加法计算器,并且加法计算器自带判断是否等于某个值.

//  一个计算器
#import <Foundation/Foundation.h>
#import "CaculatorMaker.h"
/**
 *  链式编程初试, 
 */
@interface NSObject (CaculatorMaker)

+ (int)makeCaculators:(void(^)(CaculatorMaker *make))caculatorMaker;

@end

#import "NSObject+CaculatorMaker.h"

@implementation NSObject (CaculatorMaker)

+ (int)makeCaculators:(void (^)(CaculatorMaker *))caculatorMaker {

    CaculatorMaker *cal = [[CaculatorMaker alloc] init];
    caculatorMaker(cal);
    return cal.result;
}

@end
#import <Foundation/Foundation.h>

@interface CaculatorMaker : NSObject
@property(nonatomic, assign)int result;


- (CaculatorMaker *(^)(int))add;

- (CaculatorMaker *(^)(int))sub;

- (CaculatorMaker *(^)(int))multi;

- (CaculatorMaker *(^)(int))divide;

@end

#import "CaculatorMaker.h"

@implementation CaculatorMaker



- (CaculatorMaker *(^)(int))add {

    return ^(int num){
        self.result += num;
        return self;
    };
}

- (CaculatorMaker *(^)(int))sub {

    return ^(int num) {
        self.result -= num;
        return self;
    };
}

- (CaculatorMaker *(^)(int))multi {

    return ^(int num) {
        self.result = self.result * num;
        return self;
    };
}

- (CaculatorMaker *(^)(int))divide {

    return ^(int num) {
        self.result = self.result / num;
        return self;
    };
}

@end
//  调用:
int result = [NSObject makeCaculators:^(CaculatorMaker *make) {
        make.divide(2).add(3).sub(1);
    }];
    NSLog(@"result: %d", result);

再来一个例子

#import <Foundation/Foundation.h>
@class ChainStyleManager;

typedef ChainStyleManager *(^ChainStyleVoidBlock)();
typedef ChainStyleManager *(^ChainStyleStringBlock)(NSString *);

@interface ChainStyleManager : NSObject

- (ChainStyleVoidBlock)begin;

- (ChainStyleVoidBlock)firstBlock;

- (ChainStyleStringBlock)secondBlock;

@end

#import "ChainStyleManager.h"

@implementation ChainStyleManager

- (ChainStyleVoidBlock)begin {

    return ^ChainStyleManager *(){
        NSLog(@"begin");
        return self;
    };
}

- (ChainStyleVoidBlock)firstBlock {

    return ^ChainStyleManager *() {

        NSLog(@"first block");
        return self;
    };
}

- (ChainStyleStringBlock)secondBlock {

    return ^ChainStyleManager *(NSString *str) {
        NSLog(@"second block: %@", str);
        return self;
    };
}


@end

调用

ChainStyleManager *chainMgr = [[ChainStyleManager alloc] init];
    chainMgr.begin().firstBlock().secondBlock(@"3");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值