到底什么是函数式,他和命令式编程和面向对象有什么区别。(知乎上已经有很多讨论了,感兴趣的话,我在结尾的地方贴了一些链接。)
总的来说,在函数式中,函数是一等公民,函数能作为变量的值,函数可以是另一个函数的参数,函数可以返回另一个函数等等。

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

FP 核心思想强调:

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

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

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

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

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

函数式编程:JS、Scala、Erlang

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

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

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

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

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

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

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

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

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

订阅者是事件订阅方。

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

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

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

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

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

函数式编程和响应式编程相关推荐

  1. 编程范式:函数式编程防御式编程响应式编程契约式编程流式编程

    不长的编码生涯,看到无数概念和词汇:面向对象编程.过程式编程.指令式编程.函数式编程.防御式编程.流式编程.响应式编程.契约式编程.进攻式编程.声明式编程--有种生无可恋的感觉. 本文试图加以汇总和整 ...

  2. 关于java的响应式编程框架----SpringReactor

    关于Reactor的介绍 Reactor是Spring中的一个子项目是一个基于java的响应式编程框架,此框架是 Pivotal 公司(开发 Spring 等技术的公司)开发的,实现了 Reactiv ...

  3. 浅谈Spring5 响应式编程

    目录 为什么是响应式编程 用于响应式编程实现的理想案例 响应流 (Reactive Streams) Spring 5 提供的响应式编程 Spring Web Reactive vs. Spring ...

  4. 响应式编程知多少 | Rx.NET 了解下

    1. 引言 An API for asynchronous programming with observable streams. ReactiveX is a combination of the ...

  5. Sping5——响应式编程

    1.响应式编程基础 1.1.什么是响应式编程? 响应式编程是一种面向数据流和变化传播的编程范式. 使用它可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传 ...

  6. 响应式圣经:10W字,实现Spring响应式编程自由

    前言 全链路异步化改造的基础是响应式编程 随着业务的发展,微服务应用的流量越来越大,使用到的资源也越来越多. 在微服务架构下,大量的应用都是 SpringCloud 分布式架构,这种架构总体上是全链路 ...

  7. Rxswift学习之(一)函数响应式编程思想

    Rxswift学习之(一)函数响应式编程思想 1. 函数响应式编程思想必备基本概念简介 2. iOS中三种编程思想:链式.函数式和响应式编程 2.1 链式编程 2.2 函数式编程 2.3 响应式编程 ...

  8. 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)

    响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 文章目录 响应式编程的来龙去脉(同步编程.多线程编程.异步编程再到响应式编程) 简介 1. 示例 2. 同步编程 3. 多线程编程 ...

  9. [转]异步编程与响应式框架

    作者:老赵 来源:http://blog.zhaojie.me/2010/09/async-programming-and-reactive-framework.html 前言 异步操作是强大的,它是 ...

最新文章

  1. 只用静态图像,就能实时渲染出丝滑3D效果 | CVPR 2021 Oral
  2. AndroidStudio设置背景颜色,字体大小,默认显示行号
  3. FFplay源代码分析:整体流程图
  4. mysql hostname uroot_CACTI网络流量监控
  5. 操作系统(二十六)读者写者问题
  6. 用ASP.NETCore构建可检测的高可用服务
  7. java基础知识系列---垃圾收集
  8. 计算机科学与技术专业机遇与挑战,科学网—填报专业大类志愿:机遇与挑战 - 雒运强的博文...
  9. java 泛型集合示例_Java 泛型(示例代码)
  10. 自动化代码部署、代码回滚、命令执行软件之capistrano
  11. Java中需要全部小写的是,java – 如何处理JSR 310中的大写或小写?
  12. 原子结构示意图全部_所有原子结构示意图
  13. 获取服务器的视频文件夹,视频从云服务器获取视频文件夹
  14. 仿真树叶飘落效果的实现
  15. flash for linux安装教程,Flash Player 9 FOR Linux 的安装
  16. 第三方登录 人人php,php 使用curl模拟登录人人(校内)网的简单实例
  17. 网络私有云存储的几点优势
  18. 带你玩转Visual Studio
  19. golang 隐藏启动其他程序,包含cmd窗口(黑窗口)程序,GUI程序隐藏
  20. RF基础(一) RF内建函数库BuiltIn

热门文章

  1. Comsol建模部分域的材料(如空气)属性无法被定义问题
  2. 01、RN 系列之 什么是 ReactNative
  3. smart gesture安装失败_PyroSim2019英文版软件下载和安装教程|兼容WIN10
  4. 淘宝商品列表接口和商品详情接口(带SKU和商品描述,可高并发,解决滑块)
  5. 解一元线性同余方程组(详解+例题)
  6. 每日新闻丨电信业务收入10973亿元;百度和三星宣布AI电子芯片已完成研发
  7. 计算机加解密的主要方法,一种计算机存储器的加密方法和解密方法技术
  8. 记录ueditor 秀米图片上传到本地错误
  9. 题目:下面那个流类输出面向字符的输入流()
  10. 可能你的EventBus使用并不正确,是时候真正搞懂EventBus了(上)