专栏首页finleyMa2. 函数式编程

2. 函数式编程

上篇说 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 的特性,所以较不用担心死锁等问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 说下js中的bind

    bind的受体是对象,返回的是个新的函数。 我们知道this总是指向调用他的对象。但是有时候我们希望‘固化’这个this。 也就是无论怎么调用这个返回的函数...

    mafeifan
  • PHP7 新语法总结,更新7.2注意事项

    太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1

    mafeifan
  • (转) Laravel Eloquent 提示和技巧

    原文:https://learnku.com/articles/19876#1face4 Eloquent ORM 看起来像一个简单的机制,但在幕后,有很多半...

    mafeifan
  • JavaScript闭包与箭头函数

    用户1203875
  • 认识PHP函数

    PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 fun...

    老雷PHP全栈开发
  • 学习PHP函数

    PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 fun...

    老雷PHP全栈开发
  • 浅谈js的内存与闭包0.前言1.先说类型2.再说顺序3.然后到了函数4.接着是临时空间5.垃圾回收6.IIFE和闭包

    主要结合了内存的概念讲了js的一些的很简单、但是又不小心就犯错的地方。 结论:js执行顺序,先定义,后执行,从上到下,就近原则。闭包可以让外部访问某函数内部变量...

    lhyt
  • 剑指offer - 最小的k个数 - JavaScript

    题目描述:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入 4、5、1、6、2、7、3、8 这 8 个数字,则最小的 4 个数字是 1、2、3、4。

    心谭博客
  • ES6--函数的扩展

    但上例中y对应的值如果是false的话,该赋值就不起作用了,例如y是''空字符串:

    Clearlove
  • 【TypeScript 演化史 — 第五章】将 async/await 编译到 ES3/ES5 (外部帮助库)

    自2015年11 发布1.7版以来,TypeScript 已支持 async/await 关键字。编译器使用 yield 将异步函数转换为生成器函数。这意味着咱...

    Javanx

扫码关注云+社区

领取腾讯云代金券