首页/开发/代码质量与评审速查/配套实践:优先不可变(const/final 先行)
重构手法62 条

配套实践:优先不可变(const/final 先行)

把能不变的变量都声明为不可变:缩小可变状态范围,审查时一眼分清「会变的地方」;与 Split Variable、Replace Temp with Query 协同使用,副作用面持续收窄。

手段const / final / val / readonly
范围局部变量 → 字段 → 集合内容
收益变更点集中,推理简单

对照

对照
// JS
const total = items.reduce((s, i) => s + i.price, 0);
// Java
final BigDecimal total = ...;
// Rust
let total = ...;  // 绑定默认不可变

易错点

  • 集合声明不可变但元素可变:浅不可变的边界要讲清
  • 为迁就懒初始化到处留可变字段:改用显式初始化

数据来源与参考

  • 《重构》第 2 版(不可变数据相关手法)与各语言风格指南
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌