什么叫pure function(纯函数)

在Knockout中,用到了pureComputer(),其原理来自于纯函数(pure function)。那么,什么叫纯函数呢?

纯函数

(来自:http://en.wikipedia.org/wiki/Pure_function

在计算机编程中,假如满足下面这两个句子的约束,一个函数可能被描述为一个纯函数:

  1. 给出同样的参数值,该函数总是求出同样的结果。该函数结果值不依赖任何隐藏信息或程序执行处理可能改变的状态或在程序的两个不同的执行,也不能依赖来自I/O装置的任何外部的输入(通常是这样的--看下面的描述)。
  2. 结果的求值不会促使任何可语义上可观察的副作用或输出,例如易变对象的变化或输出到I/O装置。

该结果值不需要依赖所有(或任何)参数值。然而,必须不依赖参数值以外的东西。函数可能返回多重结果值,并且对于被认为是纯函数的函数,这些条件必须应用到所有返回值。假如一个参数通过引用调用,任何内部参数变化将改变函数外部的输入参数值,它将使函数变为非纯函数。

例如:

纯函数

  • sin(x),返回实数x的sin值
  • length(s),返回串s的大小
  • encrypt(k,d),运行一个使用key k 关于日期片d的确定加密算法

非纯函数

  • 返回当前天星期几的函数是一个非纯函数,因为在不同的时间它将产生不同的结果,它引用了一些全局状态。同样地,任何使用全局状态或静态变量潜在地是非纯函数。
  • random()是非纯函数,因为每次调用潜在地产生不同的值。这是因为伪随机数产生器使用和更新了一个全局的“种子”状态。加入我们修改它去拿种子作为参数,例如random(seed),那么random变为纯函数,因为使用同一种子值的多次调用返回同一随机数。
  • printf() 是非纯函数,因为它促使输出到一个I/O装置,产生了副作用。
时间: 2024-10-25 15:15:04

什么叫pure function(纯函数)的相关文章

Function Programming - 纯函数(Pure Function)

纯函数的定义,非常重要!! Pure function 意指相同的输入,永远会得到相同的输出,而且没有任何显著的副作用. 老样子,我们还是从最简单的栗子开始: var minimum = 21; var OutercompareNumber = function(number) { return number > minimum; } 以及 var InnercompareNumber = function(number) { var minimum = 21; return number >

c++ virturn function -- 虚函数

pure irtual function  -- 纯虚函数 先看例子 #include <iostream> using namespace std; class Polygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } virtual int area() = 0 ;//{return 0;} // _vptr.Polygon show difre

纯函数、透明引用、副作用的含义

Side Effects(副作用) According to Wikipedia, a function is said to have a side effect "if, in addition to returning a value, it also modifies some state or has an observable interaction with calling functions or the outside world." Side effects inc

js —— 纯函数

//纯函数 ---> 不对外界产生副作用的函数就叫纯函 纯函数:const sum = function(value1, value2) { return value1 + value2 } *********************************只要每次给定相同的输入值,就一定会得到相同的输出值: 例如传入1与2,就一定会得到3不会改变原始输入参数,或是外部的环境,所以没有副作用不依頼其他外部的状态,变量或常量********************************* 非纯函

react事件绑定的三种常见方式以及解决Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state问题思路

在 React 组件中,每个方法的上下文都会指向该组件的实例,即自动绑定 this 为当前组件. 而且 React 还会对这种引用进行缓存,以达到 CPU 和内存的优化.在使用 ES6 classes 或者纯 函数时,这种自动绑定就不复存在了,我们需要手动实现 this 的绑定. 1.bind方法进行绑定,这个方法可以帮助我们绑定事件处理器内的 this ,并可以向事件处理器中传 递参数,如下图清晰明了: bind方法绑定 2.箭头函数进行绑定,箭头函数不仅是函数的“语法糖”,它还自动绑定了定义

条目三十九 确保判别式是“纯函数”

<条目三十九 确保判别式是"纯函数"> 一个判别式(predicate)是一个返回值为bool类型(或者可以隐式地转换为bool类型)的函数. 一个纯函数(pure function)是指返回值仅仅依赖于其参数的函数.纯函数所能访问的数据应该仅局限于参数以及常量(在函数生命期内不会被改变 判别式类(predicate class)是一个函数子类,它的operator()函数是一个判别式,也就说是,它的operator()返回true或者false. 一个精心设计的判别式类应

函数的副作用 —— 纯函数的理解

函数副作用指当调用函数时,除了返回函数值之外,还对主调用函数产生附加的影响.例如修改全局变量(函数外的变量)或修改参数. 纯函数 纯函数(Pure Function)——输入输出数据流全是显式(Explicit)的. 显式的意思是,函数与外界交换数据只有一个唯一渠道——参数和返回值:函数从函数外部接受的所有输入信息都通过参数传递到该函数内部:函数输出到函数外部的所有信息都通过返回值传递到该函数外部. 非纯函数 如果一个函数通过隐式(Implicit)方式,从外界获取数据,或者向外部输出数据,那么

纯函数和可观察副作用

当我第一次听到 “纯函数 (Pure Function)” 这个术语的时候我很疑惑.常规的函数做错了什么?为什么要变纯? 为什么我需要纯的函数? 除非你已经知道什么是纯函数,否则你可能会问同样的疑惑.不过这个概念其实很简单.我们可以花个 5 分钟一起来看以下. 什么函数是纯的? 纯函数的定义是: 如果函数的调用参数相同,则永远返回相同的结果.它不依赖于程序执行期间函数外部任何状态或数据的变化,必须只依赖于其输入参数. 该函数不会产生任何可观察的副作用,例如网络请求,输入和输出设备或数据突变(mu

函数式编程(一):纯函数

其他:函数式编程(二):curry 什么是纯函数? 纯函数是这样一种函数,即相同的输出,永远会得到相同的输出,而且没有任何可观察的副作用.‘副作用’是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行可观察的交互.概括来讲,只要跟函数外部环境发生的交互就都是副作用.函数式编程的哲学就是假定副作用是造成不正当行为的主要原因.并不是说,要禁止使用一切副作用,而是,要让他们在可控的范围内发生.从定义上来说,纯函数必须能根据相同的输入返回相同的输出:如果函数需要跟外部事物打交道,那么就无法保证这