函数引用透明 可测试性 [转]

http://blog.cocoachina.com/article/54242

首先阐述什么叫做引用透明: 函数的返回值只依赖于其输入值,这种特性就称为引用透明性(referential transparency)

可测试性 纯函数具有引用透明性(referential transparency),也就是说,不论何时调用它,对于同一组参数它永远给出同样的结果,这使它跟那些与其他系统相互交织的东西比起来更易于使用。

最常见的一般在函数式编程中大量使用了纯函数编程,目前函数响应式编程ReactiveCocoa中也有使用.

首先要注意的是,比较容易混淆的两个概念是数学函数(math function)和程序中使用的函数。

在数学函数中 y=f(x),一个输入值有固定的输出值。例如,无论计算多少次,sinπ 的结果总是 0。如果 f(x)=x/2,那么 f(10) 无论计算 100 次还是 1000 次,其结果都是 5.

程序设计中的函数却不具备这种稳定的特性,因为函数的执行不仅依赖于输入值,而且会受到全局变量,输入文件,类的成员变量等诸多因素的影响。如下:

int counter = 0; int count(){ return ++counter; } 此函数输入没有输入值,但每次都返回不同的结果。当然,就像数学函数那样,程序中函数还可以设计成“对同一输入值每次都返回相同结果”的形式。

原文地址:https://www.cnblogs.com/jijizhazha/p/7243068.html