首页/开发/代码质量与评审速查/手法:Replace Nested Conditional with Guard Clauses(卫语句)
重构手法62 条

手法:Replace Nested Conditional with Guard Clauses(卫语句)

嵌套 if 的深层分支改为前置守卫:先处理异常与边界并提前返回,主流程保持在同一层缩进;深层嵌套常意味着条件被反向表达。

场景if 深层嵌套、主逻辑被边界条件推深
写法异常/边界提前 return 或抛错
收益主流程平铺、嵌套减少

Java 示例

Java 示例
// 之前
if (isSeparated) {
    if (isRetired) result = 0; else result = amount;
} else {
    if (isRetired) result = amount * 0.9; else result = amount * 0.8;
}

// 之后
if (isSeparated) return isRetired ? 0 : amount;
return isRetired ? deadAmount() : separatedAmount();
返回多个值的语言用元组;放行路径统一在函数尾部时,卫语句与单一出口风格可以并存。

易错点

  • 所有分支都改成提前返回:正常路径与异常路径语义被混淆
  • 卫语句里做副作用(日志/计数):行为在重构中变化

数据来源与参考

  • 《重构》第 2 版 · 第 10 章(Replace Nested Conditional with Guard Clauses)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌