参考透明度(Wikipedia):
如果可以,表达式被认为是引用透明的 在不改变程序行为的情况下替换它的值(in 换句话说,产生一个具有相同效果和输出的程序 在相同的输入上。)
对于同一参数,函数始终返回相同的结果 称为引用透明度
确定性函数(MSDN):
确定性函数总是在它们出现时返回相同的结果 使用一组特定的输入值调用。
如果我们谈论确定性功能,我们是指参考透明度?如果我们谈论参考透明度,我们的意思是确定性函数?
答案 0 :(得分:4)
表达式可能比简单的函数调用更复杂,因此"参考透明度"适用于比确定性"更大的实体类别。当应用于函数时,它们基本相同,因为当且仅当它是确定性的时,函数应用程序是引用透明的。由确定性函数构建的表达式将是参考透明的,尽管也可以使表达式在引用上是透明的,即使它的某些成分是非确定性的(0*rand()
用于一个愚蠢的例子,尽管傻了使用随机种子获得确定性答案的例子。
答案 1 :(得分:2)
请注意,您对参照透明度的定义特别提到“在同一输入上的相同效果和输出”。如果您的表达式包含效果,例如I / O,那么它可以是引用透明而不是确定性的(两者都如上所定义)。
另一方面,纯函数式编程侧重于没有效果的函数,这些函数可以是可靠的确定性的。确定性函数必然是引用透明的,但反之则不然。
考虑区分“效果”,这是首先编写程序的重要和必要的业务,以及可能发生对调用者不明显的影响的“副作用”。这种不透明度与参照透明度相反,是因为很难推断出你所调用的代码。