加载中...
副作用指函数或表达式在返回值之外,还对外部状态产生的可观察改变,例如修改全局变量、写入文件、发送网络请求或打印输出。是否含有副作用是区分纯函数与非纯函数的关键,也是函数式编程重点管理的对象。

| 中文名 | 副作用 |
| 外文名 | Side Effect |
| 相关概念 | 纯函数、引用透明性 |
| 常见形式 | 状态修改、输入输出 |
| 管理思想 | 隔离与显式化 |
副作用是指一个函数或表达式在计算并返回结果之外,还对其局部环境以外的状态造成了可被观察到的改变。这类改变包括修改全局或静态变量、改变传入参数、进行输入输出、抛出异常或调用其他有副作用的函数等。
在理想的数学函数中,相同的输入总是产生相同的输出,且不影响外界,这样的函数称为纯函数。而现实中的程序必须与外界交互,读写文件、访问数据库、渲染界面等操作本质上都是副作用。副作用并非坏事,它是程序产生实际效果的途径,但不受控的副作用会让程序行为难以预测和测试。
在单元测试中,含副作用的函数往往需要借助模拟对象来隔离外部依赖,而纯函数则可直接断言输入输出。在函数式风格的架构里,常把纯粹的业务计算与产生副作用的部分分离,让核心逻辑保持纯净,把读写外界的操作集中在边界处理。这种做法提升了可测试性、可复用性和并发安全性。
问:没有副作用的程序有意义吗?答:纯计算若完全不产生任何可观察效果,对用户而言等同于什么都没做。程序最终必须依靠副作用来输出结果、保存数据,关键在于把副作用限制在可控范围内。
问:如何管理副作用?答:常见做法是把副作用推到系统边界、用纯函数处理核心逻辑,或借助特定的抽象结构显式描述副作用,使其可组合、可追踪、可测试。

| 中文名 | 副作用 |
| 外文名 | Side Effect |
| 相关概念 | 纯函数、引用透明性 |
| 常见形式 | 状态修改、输入输出 |
| 管理思想 | 隔离与显式化 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧