WebMD
本页大纲

副作用(Side Effect)

缩写:无

简述

在「得到返回值」之外,对外部环境或程序状态造成的可观察影响,如修改可变状态、读写文件、网络请求、打印日志。带副作用的逻辑更难测试、缓存与并行;完全无副作用的纯计算更易推理,但真实系统必须在边界上产生副作用才能有用。

为何出现

程序要与世界交互并记忆状态;纯数学函数不够描述完整系统。

使用场景

设计纯函数与非纯边界、测试策略(替身/模拟)、并发下的共享状态分析。

实践与应用

• 把副作用推到体系边缘,核心用纯逻辑。
• 明确函数是否承诺无副作用(文档与类型/lint 可辅助)。
• 测试时对副作用边界用替身或集成测试分层。

注意事项

• 隐藏副作用(隐式全局、单例可变)是缺陷温床。
• 日志与指标也是副作用,在热路径上有成本。
• 「纯」是相对观察层的:改变可观察行为即副作用。

对比与易混

返回值(主结果) 副作用
是什么 交给调用方的结果 额外可观察影响
例子 sum 的数字 写文件、改全局、网络、打印

关联术语

• 纯函数:无副作用且结果仅依赖输入
• 求值:副作用常在求值过程中发生
• 状态:可变状态是副作用的常见载体
• 测试替身:隔离副作用边界时的常用手段