RxSwift(一)函数响应式编程

前言

从一年前开始使用RAC时,那会就知道ReactiveCocoa是一个灵感来源于函数响应式编程的框架,但并没有去深入了解。最近又开始了RxSwift的学习和使用,先从最基础的函数响应式编程思想开始学习。

关于函数式编程(Functional Programming)思想

  • 函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将计算机运算视为函数运算,并且避免使用程序状态以及易变对象。

  • 从数学公式的角度理解:
    已知y = f(x),而x = f(x),所以y = f(f(x))
    从这里我们不难理解函数式编程的特点:

    允许把函数本身作为参数传入另一个函数,允许返回一个函数。

  • 没有副作用

func factorial(a:Int)->(Int){
           if a == 1{
               return 1
           }
           return 1 * sum(a:a - 1)
       }

上面的代码是一个阶乘的递归函数,体现了在函数式编程里是基本上没有状态量,也没有赋值语句,只有表达式的。同时也可以体现一点,函数式编程是用递归作为流程的机制

  • 闭包和高阶函数

    • 闭包是起函数的作用并可以像对象一样操作的对象。
    • 高阶函数可以用另一个函数(间接地,用一个表达式) 作为其输入参数,在大多数情况下,它甚至返回一个函数作为其输出参数。
  • 引用透明

    • 如果一个函数只会受到入参的变化,那么这个函数每次的调用都会是相同的。
    • 一个函数f(x),里面调用了g(x),g(x)里面又调用了h(x),h(x)最终计算出了结果,作为f(x)的返回值返回了。
    • 如果所有的状态都没有改变,f(x)下一次再调用相同的参数的时候,应该会得到完全一样的结果,那这个时候其实不用再调用g(x)和h(x)了,也可以得到完全一样的结果。
      总的来说,入参相同,返回值结果一定相同,如果函数具有这种性质,就可以说是引用透明的。

关于响应式编程(Reactive Programming)思想

  • Reactive Programming 就是编写关于怎么响应事件的编程模式,这些事件包括:用户输入,数据流,系统状态的变化等等。

  • 响应式编程的第一个核心特点是变化传递。简单的理解就是,在一串事件流中的一个事件发生变化后,一连串的事件均会发生变化,有点像现实里的多米诺骨牌。

  • 响应式的第二个核心特点是数据流。可以基于任何东西创建数据流。流非常轻便,并且无处不在,任何东西都可以是一个流:变量,用户输入,属性,缓存,数据结构等等

  • 响应式的第三个核心特点是声明式的编程范式。无论传递过来的元素是什么,计算逻辑是不变的,从而形成了一种对计算逻辑的绑定,有点不变应万变的感觉。

RxSwift(一)函数响应式编程_第1张图片

响应式编程(reactive programming)是一种基于数据流(data stream)和变化传递(propagation of change)的声明式(declarative)的编程范式。

响应式编程的“变化传递”就相当于果汁流水线的管道;在入口放进橙子,出来的就是橙汁;放西瓜,出来的就是西瓜汁,橙子和西瓜、以及机器中的果肉果汁以及残渣等,都是流动的“数据流”;管道的图纸是用“声明式”的语言表示的。
在我们日常开发中,如果能搭建一条从数据层到view层的通道,那么我们不需要通过命令式来更改数据后去刷新UI,完全可以在改变了数据后,利用这个通道自动传递这个变化到View上,然后自动刷新了界面。当然,可以建立双向通道,View的改变也能实现数据的自动修改。

函数响应式编程(Functional Reactive Programming)

FRP - Functional Reactive Programming 函数反应式编程是一种编程范例,主要是通过 functional programming 函数式编程的函数为基本模块来实现反应式编程 reactive programming,目的是简化编程的步骤,例如简化界面编程时数据的实时更新流程。简单来说就是 使用函数来达到数据的自动异步更新。

总结

其实这篇主要的目的是为了在研究RxSwift前能对于RX家族的函数式响应编程思想有一定的了解,在使用和深入挖掘RxSwift时能起到作用。

推荐一篇英文的关于响应式编程思想的好文:
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754

你可能感兴趣的:(RxSwift(一)函数响应式编程)