引用透明:为什么替换表达式不会改变结果?

引用透明:为什么替换表达式不会改变结果?

引用透明不是“代码容易看懂”,而是一条替换规则:一个表达式可以被它的值替换,程序其余行为仍不改变。比如计算2+3的地方都可直接写成5;但“读取当前时间”不能先算一次再处处替换,因为结果会随调用时刻变化。

它的重要性在于把整体问题拆回局部。只看输入和表达式,就能判断输出,不必同时追踪隐藏状态、外部文件或执行顺序。测试、缓存和并行重组因此更可靠。

引用透明与确定性相近,却不完全相同。一个操作即使每次返回同样结果,若同时修改外部状态,用结果替换它仍会漏掉影响;不可变性则常帮助实现引用透明,却不是这条规则本身。中心判断是:引用透明保护的不是某种编程风格,而是“局部替换不破坏整体”的推理边界。


了解 Geoffrey Chen 的更多信息

订阅后即可通过电子邮件收到最新文章。