首页/开发/代码质量与评审速查/手法:Replace Return Value with ... / 拆出修改与查询
重构手法62 条

手法:Replace Return Value with ... / 拆出修改与查询

函数同时承担「回答一个问题」与「改变状态」时,按查询与命令分离:要么返回结果并保持无副作用,要么只做动作不回值;副作用与返回值混杂最常见的坑是重复执行。

坏味道命令查询混用(Command-Query Separation 违反)
做法拆分查询函数与命令函数
收益可安全重复调用查询、便于缓存

示例

示例
// 之前:pop() 返回并删除,重复调用有副作用
// 需求「看一眼栈顶」时被迫 peek

// 之后:peek() 查询 + pop() 命令分开

易错点

  • 拆分后旧调用忘记更新:两次执行导致数据重复变更
  • 查询函数里做惰性初始化:表面无副作用实则写入

数据来源与参考

  • 《重构》第 2 版 · 第 11 章(Separate Query from Modifier 等)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌