函数式编程和响应式编程

在程序开发中,a=b+c;赋值之后,b或者c的值变化后,a的值不会跟着变化。响应式编程目标就是,如果b或者c的数值发生变化,a的数值会同时发生变化。

函数式编程

函数式编程是一系列被不公平对待的编程思想的保护伞,它的核心思想是,它是一种将程序看成是数学方法的求值、不会改变状态、不会产生副作用(后面我们马上会谈到)的编程方式。

FP 核心思想强调:

  • 声明式代码 —— 程序员应该关心是什么,让编译器和运行环境去关心怎样做。

  • 明确性 —— 代码应该尽可能的明显。尤其是要隔离副作用避免意外。要明确定义数据流和错误处理,要避免 GOTO 语句和 异常,因为它们会将应用置于意外的状态。

  • 并发 —— 因为纯函数的概念,大多数函数式代码默认都是并行的。由于CPU运行速度没有像以前那样逐年加快((详见 摩尔定律)), 普遍看来这个特点导致函数式编程渐受欢迎。以及我们也必须利用多核架构的优点,让代码尽量的可并行。

  • 高阶函数 —— 函数和其他的语言基本元素一样是一等公民。你可以像使用 string 和 int 一样的去传递函数。

  • 不变性 —— 变量一经初始化将不能修改。一经创建,永不改变。如果需要改变,需要创建新的。这是明确性和避免副作用之外的另一方面。如果你知道一个变量不能改变,当你使用时会对它的状态更有信心。

函数式编程:JS、Scala、Erlang

响应式编程

响应式系统具备如下特点:

  • 响应性 —— 一个系统应该总是能够及时响应用户请求,并且保持很低的延迟。

  • 弹性 —— 一个系统即使在部分组件开始出现故障的情况下也应该能够作出响应,将停机时间将至最低。

  • 可伸缩性 —— 一个系统在负载增加时应该能够根据需求增加资源以确保响应性,但同时也应该能在负载降低时减少资源,保持高效的资源利用率。

  • 消息驱动 —— 在一个系统的不同部分之间传递消息,Ledbrook认为这是响应式系统的一个必备特点。

响应式实际上是观察者模式加上事件源的完成通知能力、错误传播能力和监听者同事件源通信的能力。

响应式流是一种规范,ReactiveX是一种常用的跨平台实现。

下面三个重要的概念是响应式流API的构建基础:

  • 发布者是事件的发送方,可以向它订阅。

  • 订阅者是事件订阅方。

  • 订阅将发布者和订阅者联系起来,使订阅者可以向发布者发送信号。

响应式编程是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一条流合并为一条新的流。

响应式编程的一个关键概念是事件。事件可以被等待,可以触发过程,也可以触发其它事件。事件是唯一的以合适的方式将我们的现实世界映射到我们的软件中:如果屋里太热了我们就打开一扇窗户。同样的,当我们更改电子表(变化的传播)中的一些数值时,我们需要更新整个表格或者我们的机器人碰到墙时会转弯(响应事件)。

今天,响应式编程最通用的一个场景是UI:我们的移动App必须做出对网络调用、用户触摸输入和系统弹框的响应。在这个世界上,软件之所以是事件驱动并响应的是因为现实生活也是如此。

响应式编程的具体实现-RxJava。RxJava提供了一种以面向时序的方式考虑数据的机会:所有事情都是持续变化的,数据在更新,事件在触发,然后你就可以创建事件响应式的、灵活的、运行流畅的App。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/johnWcheung/article/details/73136476
所属专栏: Android开发面试
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭