核心是用提前返回将主逻辑置于顶层,通过卫语句拦截异常路径:每个if只做单一检查并立即return,主业务逻辑缩进为0;拆分长条件为独立判断;封装为语义化函数;按职责分层校验。

核心是用 提前返回 把主逻辑“托”到顶层,避免它被层层 if 包裹。不是消灭 if,而是让每个 if 只做一件事:不满足就立刻退出。
用卫语句拦截异常路径
把否定条件(如参数为空、状态非法、权限不足)放在最前面,满足就直接 return,主业务逻辑自然落在缩进为 0 的位置。
- 错误写法:用户校验嵌在三层 if 里,主逻辑缩进太深
- 正确写法:if (!user) return handleError('用户不存在'); if (!user.isActive) return handleError('账号已停用'); if (!hasPermission(user, 'edit')) return handleError('无编辑权限'); ——之后就是干净的编辑逻辑
拆分长条件为多个独立判断
一个 if 里堆满 && 并不比嵌套更清晰。把它拆成多个单点检查,每个都用 return 拦截。
- 比如处理订单:不用
if (order && order.status === 'paid' && order.items.length > 0 && isWithinTimeLimit(order)) - 换成:if (!order) return; if (order.status !== 'paid') return; if (order.items.length === 0) return; if (!isWithinTimeLimit(order)) return;
- 每行只管一个关注点,出问题时定位快,加新规则也只需加一行
配合函数封装提升可读性
把一组相关判断打包成小函数,内部用 return 控制流程,外部调用就变成一句清晰断言。
- 例如:
if (!isValidOrder(order)) return;,而isValidOrder内部可包含字段检查、时间验证、库存预占等多步,但对外零暴露细节 - 函数名本身成为文档:canProcessRefund()、shouldSendNotification()、isEligibleForDiscount()
- 测试也更聚焦——单独测这个函数,不用构造整个调用链
按职责分层使用 return
不同层级的校验,用 return 分开处理,不混在一起。
- 入口层(如事件回调):检查表单是否填完、按钮是否禁用、网络是否可用
- 业务层(如提交前):检查用户角色、操作权限、库存是否充足、是否重复提交
- 数据层(如 API 响应后):检查 response.code 是否为 200,data 是否存在,而不是用 if 处理十几个错误码
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











