引用透明性是计算机程序部分的一个特点。如果一个程序的一部分可以被替换成它所返回的值而不改变程序的行为,那么它就被称为"引用透明"。一个引用透明的函数必须是纯粹的--如果它接受相同的输入,它必须总是给出相同的输出,而且它必须没有任何副作用--程序中除了给出一个值之外,没有其他的动作。与引用透明相反的是引用不透明。
在数学中,所有的函数都是透明的,因为一个数学函数只能取值并吐出一个值。在编程中,这并不总是正确的--一个函数可能也会找出今年的哪一天,或者打印一条信息到屏幕上。由于这种差异,有些人在编程中使用其他名称的函数,比如程序。
引用透明化让程序员和编译器把代码看成是一个重写系统--把一个表达式替换成其他东西。这可以帮助完成一些任务,比如。
- 证明程序或代码是正确的--无论如何,它都能做到它应该做的事情。
- 让算法更简单。
- 使得修改代码更加容易,同时还能确保代码的作用。
- 使代码运行的速度更快,或者以占用更少内存的方式运行。
做最后一项任务有几种方法--最著名的是记忆化(在第一次之后保存答案),普通子表达式消除(弄清楚是否值得将代码中相同的两个部分合并),懒惰评估(直到代码真正需要时才找到答案),以及并行化(同时处理多个问题)。