RAC中的链式调用和函数式编程
2017-12-04 00:00
113 查看
RAC全程ReactiveCocoa,是由Github开源的一个应用于iOS和OS开发的新框架。RAC结合了函数式编程(Functional Programming)和响应式编程(Reactive Programming),其中的函数式编程一直比较难以理解,最近在使用链式调用的过程当中,才获得进一步理解。
有参数,有返回值,可以用
block 可以作为一个方法的参数或者返回值,链式调用中,定义的方法返回值为一个 block,这个block的类型为
如下方中的
调用方法如下
当 readBook 方法被调用时,实际上是获取到了一个
我们在使用 RAC 框架时经常会用到这一样个方法:
这就是我现在理解的一点函数式编程的应用吧,函数(block) 作为一个参数存在,方法中可以根据这个拿到这个参数并执行,以得到返回值。
理解比较浅,有错误的地方还望指正。
在查找资料的过程中读到阮一峰老师的函数式编程的文章,传送门 对照一下 RAC 框架中并不止有点体现了函数式编程的思想,不过还不是太懂,还在琢磨当中。
RAC
函数式编程初探
objc利用block实现链式编程方法
链式调用
链式调用的一个特点就是返回值为一个 block,block 其实是一个匿名函数,定义方法如下:returnType (^blockName)(parameterTypes)
有参数,有返回值,可以用
blockName()执行这个 block,当然需要传入定义好的参数。
block 可以作为一个方法的参数或者返回值,链式调用中,定义的方法返回值为一个 block,这个block的类型为
returenType (^)(parameterType)
如下方中的
readBook方法,返回值为一个
HMPerson * (^)(NSString *)类型的block
- (HMPerson * (^)(NSString *bookName))readBook { return ^ id (NSString *bookName) { NSLog(@"I read a book named %@",bookName); return self; }; }; - (HMPerson * (^)(NSString *))drink { return ^ id (NSString *drink) { NSLog(@"I drink %@", drink); return self; }; };
调用方法如下
HMPerson *wyMan = [[HMPerson alloc] init]; wyMan.readBook(@"River town").drink(@"Cola");
当 readBook 方法被调用时,实际上是获取到了一个
HMPerson * (^)(NSString *)类型的 block,block 的调用方式就是括号里加参数,那么
person.readBook(@"River town")就完成了
readBook方法的调用,由于这个 block 返回了一个
HMPerson实例,我们可以用这个实例接着做其他事,这样的调用像一条链子一样,一口气做完一个对象想做的所有事都可以。
RAC 中的函数式编程
在链式调用的方法中,我们看到可以将一个 block 作为一个返回值的形式,在需要的地方获取到这个 block 并执行它,block 中定义了所需要做的操作,那么可不可以把 block 当作参数,定义特定类型的 block,比如一个^id(id value)类型的 block,只需要这个 block 最终的返回值,至于这个 block 中对于这个 value做了什么操作并不关心,相当于一个工厂,只提供原料,至于中间的工序如何不关心,只关心最终得到一个产品就好了。
我们在使用 RAC 框架时经常会用到这一样个方法:
[[ClassA doSomething] map:^id(id value) { }];
doSomething方法返回值为一个
RACSignal,一个信号可以调用
map方法,将这个信号中的 value 拿出来,并要求一个返回值,这个值可以根据 value 计算得到,至于怎么计算,可以根据业务定制,经过计算得到的值作为返回值返回,map 中会根据这个返回值生产一个新的信号。总结的来说,就是抽象出来需要做什么 (block 中的逻辑)。
这就是我现在理解的一点函数式编程的应用吧,函数(block) 作为一个参数存在,方法中可以根据这个拿到这个参数并执行,以得到返回值。
理解比较浅,有错误的地方还望指正。
在查找资料的过程中读到阮一峰老师的函数式编程的文章,传送门 对照一下 RAC 框架中并不止有点体现了函数式编程的思想,不过还不是太懂,还在琢磨当中。
参考资料
响应式编程FRPRAC
函数式编程初探
objc利用block实现链式编程方法
相关文章推荐
- 响应式编程、函数式编程、链式调用
- Promise模式编程链式调用中的一个小坑——匿名函数
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
- 一步一步教你理解和实现iOS中的链式编程和函数式编程
- iOS中的函数式编程和链式编程
- ReactiveCocoa 函数响应式编程简介 链式编程 函数式编程 响应式编程
- iOS中函数式编程和链式编程的应用
- iOS 链式编程与函数式编程
- Scala深入浅出进阶经典 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
- C#函数式编程之递归调用
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用学习笔记
- PHP调用静态方法实例化自己实现链式编程
- 51.Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
- ios-链式编程、函数式编程以及响应式编程
- 编程中的链式调用:Scala示例
- Promise编程模式中链式调用时传值的一个小坑
- Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用之Scala学习笔记-41
- Guava 教程(3):Java 的函数式编程,通过 Google Collections 过滤和调用
- javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点
- JavaSE8基础 链式编程 调用方法返回对象再调方法 简单示例