常用的编程思想理解:链式编程,函数式编程,响应式编程

在网上看了很多关于编程思想的博客,感觉有的和我的理解不太一样,这里写下我对几种编程思想的理解,同时对链式编程进行代码分析及demo练习。

目录

一、定义

二、关于Masonry

三、链式编程

1、链式单元

2、添加category

3、效果


一、定义

链式编程:我的理解为链式编程是一种表现方式为“.”+“()”并能够一直使用“.”连续的链式的进行开发的一种“语法”,其表现方式是由点语法和block来实现的,通过block传对应的参数并返回本身来实现连续调用。

响应式:响应式编程主要表现为监听改变,即代码的执行不是按代码的书写顺序,而是按响应的顺序,所以数据变化的结果才是最重要的,这点可以参考KVO。

函数式:我的理解函数式编程是一种封装,而且这种封装是完全独立的不受影响的,也就是函数式的特点是不依赖外部状态,不改变外部状态,完全解耦完全静态的。就像我们进行1+1的操作,这个“+”可以理解为一种封装,“+”方法通过代码实现了“+”逻辑,我们只需要使用就可以,外部数据不会影响“+”方法,“+”方法也不会影响外部数据。

在实际开发中各种编程思想交叉使用,并不会完全用一种方法开发,所以不需要太过纠结到底是什么编程方式,有自己的理解就可以。

二、关于Masonry

关于Masonry

Masonry是典型的链式编程+函数式编程写法

[redView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.left.top.equalTo(@(100));
    make.right.bottom.equalTo(@(-100));
}];

可以看到 mas_makeConstraints 就是运用的函数式编程,该方法与block中的约束处理是完全独立,完全解耦的,甚至里面的left方法,top方法也可以认为是函数式编程,因为其符合函数式编程的特点。

而整体的make.left.top.equalTo(@(100)) 是链式编程,因为其符合链式编程“.”+“()”结构组成,并且能够连续点语法。

这里可以发现单独的left方法即是函数式编程又是链式编程,因为他符合函数式编程的完全解耦的静态特点,也符合链式编程的返回block形式,不过他只是链式编程的其中一个单元。

三、链式编程

1、链式单元

链式编程的组成方式为“.”+“()”,通过用get方法+block传参的方式来实现。

这里模仿Masonry实现一个加法的功能。

首先写一个返回值为block的get方法,和一个总和sum

@property (nonatomic,assign)int sum;


-(SumManager * (^)(int))add
{
    return ^(int a){
      
        self.sum+=a;
        return self;
    };
}

然后在调用时是这样的:

SumManager * manager = [[SumManager alloc]init];
manager.add(1);

为了方便理解可以分解成:

SumManager *(^block)(int) =  [manager add];
block(1);

就是add方法返回一个block。

也可以表达为:

[manager add](1);

这样一个链式单元就完成了。

2、添加category

为了方便引入,并且做成和Masonry的样式,我们需要加入category

#import "NSObject+Sum.h"

@implementation NSObject (Sum)

-(int)gs_getSumWithManager:(void (^)(SumManager * _Nonnull))block
{
    SumManager * m = [[SumManager alloc]init];
    block(m);
    return m.sum;
}

这样通过category可以随时调用了。

3、效果

int sum = [self gs_getSumWithManager:^(SumManager * _Nonnull manager) {
    manager.add(1).add(2);
}];
NSLog(@"%d",sum);

这样gs_getSumWithManager是一个函数式编程,其封装了add方法,并且是完全解耦的可以随时调用。

manager.add(1).add(2); 这里又是一个链式编程,符合链式编程的所有特点。

做到了和Masonry一样的效果。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值