美文网首页JavaScript
什么是纯函数 (Pure Function) ?

什么是纯函数 (Pure Function) ?

作者: Lia代码猪崽 | 来源:发表于2020-11-27 10:48 被阅读0次

本文主要参考

纯函数的好处

纯函数非常“靠谱”,执行一个纯函数你不用担心它会干什么坏事,它不会产生不可预料的行为,也不会对外部产生影响。
不管何时何地,你给它什么它就会乖乖地吐出什么。如果你的应用程序大多数函数都是由纯函数组成,那么你的程序测试、调试起来会非常方便。

纯函数(Pure Function)

纯函数 (Pure Function)函数式编程 里面非常重要的概念 。

如果一个函数是 纯函数 (Pure Function) ,它必须符合两个条件:

  • 返回结果只依赖于它的参数。
  • 并且在执行过程里面没有副作用。

1. 函数的返回结果只依赖于它的参数

例1.1
const a = 1
const foo = (b) => a + b
foo(2) // => 3

虽然这里的 a 是常量,但函数 foo 不属于纯函数,因为它的返回结果并不只是依赖它的参数 b ,还依赖了a 。也许在这里 a 是常量,但谁也不能保证在别的地方调用 foo 函数时,a 仍是常量,值仍为2,所以返回结果是不可控的。

例1.2
const a = 1
const foo = (x, y) => x + y
foo(a, 2)

函数 foo 仅依赖它的参数 xy ,返回结果也只由这两个参数决定,是可控的。

2. 函数执行过程没有副作用

一个函数执行过程对产生了外部可观察的变化那么就说这个函数是有副作用的。

例2.1
const counter = { x: 1 }
const foo = (obj, b) => {
  obj.x = 2
  return obj.x + b
}

foo(counter, 2) // => 4
counter.x // => 2

执行 foo 函数时,有将作为参数传进来的外部变量 counter.x 的值修改为 2。无论函数在哪里执行,都会修改函数外部变量的值,所以它产生了 副作用,不是 纯函数

例2.2
const counter = { x: 1 }
const foo = (obj, b) => {
  return obj.x + b
}

foo(counter, 2) // => 3
counter.x // => 1

可以看得出来,以 counter2 为参数执行了 foo 函数后, counter.x 的值并没有发生什么变化。所以 foo 函数执行过程中没有修改函数外部的值,没有产生 副作用

例2.3
const foo = (b) => {
  const obj = { x: 1 }
  obj.x = 2
  return obj.x + b
}

执行函数时,虽然 obj.x 的值有变化,但 obj 是在函数内部声明的,不属于函数外部的值,外部程序根本观察不到,所以没有产生 副作用

除了修改外部的变量,一个函数在执行过程中还有很多方式产生外部可观察的变化,比如说调用 DOM API 修改页面,或者你发送了 Ajax 请求,还有调用 window.reload 刷新浏览器,甚至是 console.log 往控制台打印数据也是 副作用

相关文章

  • 什么是纯函数 (Pure Function) ?

    本文主要参考 作者:胡子大哈[https://www.zhihu.com/people/hu-zi-da-ha] ...

  • 什么是 Pure Function

    Pure Function,直译一下就是「纯函数」。 Pure Function 的概念很简单,也许你看到这个名词...

  • JS纯函数 柯里化函数 组合函数

    1.纯函数(Pure Function) 函数式编程中有一个非常重要的概念叫做纯函数,javascript符合函数...

  • Scala基础——概述

    概述 编程范式 函数式编程 就是只用纯函数(Pure function)来编写程序.纯函数:没有副作用的函数,副作...

  • 浅析函数式编程

    函数式编程 函数式编程也是一种编程范式,其核心是尽量做到用 Pure Function纯函数来编程,主要的好处是,...

  • React中的纯函数

    React之纯函数 纯函数 Pure Function定义:一个函数的返回结果只依赖于它的参数,并且在执行的过程中...

  • [Haskell] Monadic IO System

    1. Pure Language Haskell是一个纯函数式编程语言(pure language),任何一个函数...

  • 操作符(Operators)

    实例操作符Observable实例上的方法。操作符本质上是一个纯函数 (pure function),它接收一个 ...

  • 纯函数

    Function VS Procedures 这里的纯函数指的是在函数式编程里面的纯函数。要理解好纯函数这个概念,...

  • Go Type System(二)

    函数 什么是Function Signatures? 什么是Function Types? 什么是Function...

网友评论

    本文标题:什么是纯函数 (Pure Function) ?

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