美文网首页
函数响应式编程概述

函数响应式编程概述

作者: Jorunk | 来源:发表于2018-08-02 20:51 被阅读63次

什么是编程?

范式概念 需求-模式-代码

面向过程 vs 面向对象

面向过程和面向对象

命令式编程 vs 函数式编程

命令式语言下的响应式编程
声明式编程

函数响应式编程

  • 满足函数式的一些特性
  • 面向离散事件流
  • 离散时间流操作

什么是ReactiveCocoa?

  • Github Mac客户端副产物
  • FRP在Cocoa框架下的实现
  • 富含了Cocoa框架多种组件
  • 提供基于时间变化的数据流的组合和实现
  • 简称RAC

理论基础

理解基于时间变化的数据流

  • 如何创建
  • 如何遍历
  • 如何停止遍历

基于时间变化的数据流可操作范围

更多操作

  • 加壳


函数式编程四个特性

  • 闭包&高阶函数
  • 惰性计算
  • 不改变状态
  • 递归

核心组件

RACStream的两个子类

Sequence vs Signal

  • Pull-driver vs Push-driver
  • Data vs Event
  • 其他差异

RACSequence使用方法

RACSignal使用示例

Signal Subscriber Disposable

Scheduler

  • 用来做调度
  • 代替GCD
  • 异步和并发

Cocoa框架适配工具

作业

一、判断题:

  • (1)函数式编程是面向对象编程的升级版

错。函数式编程和链式编程相对应,所以说并不是升级版,而是不同的编程范式;编程的思想或者模式是根据需求来的,既然是根据需求来的就不存在升级或者降级。

  • (2)组成链式调用的必要条件就是在方法里面返回对象自己
    错。只要返回的是相同的类型的对象就可以,未必要是自己,也返回子类或者其他类,只要这个链式调用可以承载下去。
  • (3)响应式编程可以用C语言这样的语言实现
  • (4)ReactiveCocoa是基于KVO的一个开源库
    错。虽然有些信号的产生来自KVO,但是有些不是
  • (5)ReactiveCocoa是一个纯函数式编程的库
    错。ReactiveCocoa不是一个纯函数式编程的库,因为它本身没有建立在纯函数式的环境
  • (6)下面的函数由于有赋值所以不是一个纯函数
typedef int(^FunctionType1)(int x);

typedef int(^FunctionType2)(int x, int y);



FunctionType1 someFunction(FunctionType2 func, int x, FunctionType1 valueMap) {

    int nextValue = valueMap(x);

    return ^int(int y) {

        return func(nextValue, y);

    };

}

虽然有赋值,但是每次固定输入都能得到固定的输出,并且没有改变外部的状态,是纯函数。

二、问答题:

想到了master,slave这个经典的场景。一个黑心的老板有5个程序员,这里有100个需求。每个程序员完成后,告诉老板说我做完了,再来一个需求。这就是pull driver,接收方主动来拿。如果老板不管这个人忙不忙,需求来了就直接分配给某个程序员,这就是push driver,源直接推送给某个接收方

  • (2)怎么理解函数式语言中的引用透明?

引用透明(Referential transparency),指的是函数的运行不依赖于外部变量或"状态",只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。

引用透明(Referential Transparent)的概念与函数的副作用相关,且受其影响。如果程序中任意两处具有相同输入值的函数调用能够互相置换,而不影响程序的动作,那么该程序就具有引用透明性。它的优点是比非引用透明的语言的语义更容易理解,不那么晦涩。纯函数式语言没有变量,所以它们都具有引用透明性。

  • (3)函数式语言主张不变量的原因是什么?
    • 保证和数学模型的亲密性
  • 解决了线程的安全
  • 让编译器更好的优化

其次通过声明区分可变和不可变性降低了复杂度。我们可以更加关注变化的value,增加了一种语义。当我们看到一个值声明是可变的,我们会知道这个值在后面的代码中会被赋值。

三、编程题:

  • (1)基于变量不可变(任何变量不允许二次赋值)来实现一个计算最大值的函数,定义如下

int max(int *array, int count)


    int max(int *array, int count){
    
    if (count < 1) return INT_MIN;
 
    if (count == 1) return array[0];
    int headMax = max(array, count - 1);
    
    return headMax > array[count - 1] ? headMax : array[count - 1];
   
}
  • (2)自由发挥写一个高阶函数应用的例子,要求必须有返回函数的部分
    int array[] = {1, 2, 3, 4, 8, -1};
    int max = fold(array, sizeof(array) / sizeof(typeof(array)), ^int(int acc, int next) {
        return acc > next ? acc : next;
    }, INT_MIN);

    int fold(int *array, int count, ReduceType block,int first){
    if (count == 0) return first;
    
    return fold(array + 1, count - 1, block, block(first, array[0]));
}
typedef BOOL (^ConditionType)(int a);
int find(int *array, int count, ConditionType finder)
{
    if (count == 0) return INT_MIN;
    if (finder(array[0])) {
        return array[0];
    }
    return find(array + 1, count - 1, finder);
}

ConditionType not(ConditionType block)
{
    return ^BOOL(int a){
        return !block(a);
    };
}
main(){
ConditionType even = ^BOOL(int v){
        return v % 2 ==0;
    };
    int value = find(array, sizeof(array) / sizeof(int), even);
}

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • RxJava

    响应式编程概述 什么是响应式编程? 是一种基于异步数据流概述的编程模式 响应式编程--关键概念 事件 响应式编程-...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • 函数响应式编程概述

    什么是编程? 面向过程 vs 面向对象 命令式编程 vs 函数式编程 函数响应式编程 满足函数式的一些特性 面向离...

  • 函数式响应式编程概述

    函数式响应式编程概述 满足函数式的一些特性;如何看待计算,如何避免使用状态量, 面向离散事件流每个对象是个离散事件...

  • 函数响应式编程思想 & RxSwift 核心逻辑

    函数响应式编程 = 函数式编程 + 响应式编程 一、函数式 一种编程范式,如y=f(x),y=f(f(x))(高阶...

  • 函数响应式编程

    # 函数响应式编程 开始之前了解一下什么是函数响应式编程? 函数响应式编程是种编程范式。它是通过构建函数操作数据序...

  • 初识ReactiveCocoa

    今天主要分享内容: ReactiveCocoa简单介绍 响应式编程和函数编程的概述 RACSignal 信号 RA...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 函数响应式编程思想

    函数响应式编程思想 函数响应式编程是种编程范式。它是通过构建函数操作数据序列,然后对这些序列做出响应的编程方式。它...

网友评论

      本文标题:函数响应式编程概述

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