美文网首页
RxJS 学习系列 2. 函数式编程

RxJS 学习系列 2. 函数式编程

作者: 飞凡的陀螺 | 来源:发表于2018-12-15 19:58 被阅读5次

上篇说 ReactiveX.io (官网)给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式、迭代器模式和函数式编程的精华!

什么是 函数式编程 Functional Programming

简单说 Functional Programming 核心思想就是做运算处理,并用 function 来思考问题,例如像以下的算数运算式:
例如像以下的算数运算式:
(5 + 6) - 1 * 3

我们可以写成

const add = (a, b) => a + b
const mul = (a, b) => a * b
const sub = (a, b) => a - b

sub(add(5, 6), mul(1, 3))

我们把每个运算包成一个个不同的 function,并用这些 function 组合出我们要的结果,这就是最简单的 Functional Programming。

函数式编程是一种编程范式,最主要的特征是,函数是第一等公民。

特点:

  1. 函数可以被赋值给变量
    var hello = function() {}
  2. 函数能被当作参数传入
    fetch('www.google.com') .then(function(response) {}) // 匿名 function 被传入 then()
  3. 函数能被当作返回值
var a = function(a) {
    return function(b) {
      return a + b;
    }; 
    // 可以回传一个 function
}
  1. 函数式编程强调 function 要保持纯粹,只做运算并返回一个值,没有其他额外的行为。
    纯函数 (Pure function 是指 一个 function 给予相同的参数,永远会回传相同的返回值,并且没有任何显著的副作用(Side Effect))
var arr = [1, 2, 3, 4, 5];

arr.slice(0, 3); // [1, 2, 3]

arr.slice(0, 3); // [1, 2, 3]

arr.slice(0, 3); // [1, 2, 3]

这里可以看到 slice 不管执行几次,返回值都是相同的,并且除了返回一个值(value)之外并没有做任何事,所以 slice 就是一个 pure function。

var arr = [1, 2, 3, 4, 5];

arr.splice(0, 3); // [1, 2, 3]

arr.splice(0, 3); // [4, 5]

arr.slice(0, 3); // []

这里我们换成用 splice,因为 splice 每执行一次就会影响 arr 的值,导致每次结果都不同,这就很明显不是一个 pure function。

函数式编程好处

  • 可读性高
[9, 4].concat([8, 7]) // 合并数组
      .sort()  // 排序
      .filter(x => x > 5) // 过滤出大于 5 的
  • 可维护性高
    因为纯函数等特性,执行结果不依赖外部状态,且不会对外部环境有任何操作
  • 易于平行/并行处理
    因为我们基本上只做运算不碰 I/O,再加上没有 Side Effect 的特性,所以较不用担心死锁等问题。

相关文章

  • RxJS 学习系列 2. 函数式编程

    上篇说 ReactiveX.io (官网)给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,React...

  • 第1章 函数响应式编程

    注: 学习程墨老师《深入浅出RxJS》的笔记 RxJS采用了函数响应式编程。RxJS世界中有一种特殊的对象,称为流...

  • Scala 函数式编程(一) 什么是函数式编程?

    为什么我们需要学习函数式编程?或者说函数式编程有什么优势?这个系列中我会用 scala 给你讲述函数式编程中的优势...

  • RxJS系列教程(三) RxJS与函数式编程

    可以这么说,响应式编程是继承自函数式编程。从Rx的官网上我们看到这样的定义: RxJS是结合了观察者模式,迭代器模...

  • 01RxJS-响应式编程类库

    rxjs-响应式编程类库)RxJS官网[https://rxjs.dev/] RxJS(Reactive Exte...

  • Rxjs

    响应式编程简介 Rxjs概念 Rxjs全称Reactive Extension for JavaScript,Ja...

  • rxjs

    rxjs使用观察者模式、迭代器模式以及函数式编程实现一种理想的、管理序列事件的方式rxjs的基础概念 Observ...

  • OC 函数式链式编程总结

    函数式编程 编程思想:把过程尽量写成一系列嵌套的函数。(函数式编程更加强调程序执行的结果而非执行的过程,函数式编程...

  • XDH_LESSON3

    LINUX基础学习 昨日复习 1.初步认识指令式编程与函数式编程,了解到指令式编程思维方式。2.了解指令式编程下J...

  • 编程范式 —— 函数式编程入门

    该系列会有 3 篇文章,分别介绍什么是函数式编程、剖析函数式编程库、以及函数式编程在 React 中的应用,欢迎关...

网友评论

      本文标题:RxJS 学习系列 2. 函数式编程

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