提前返回可将异常分支前置,主逻辑浮至顶层消除缩进,提升可读性;通过分层校验、否定逻辑替代else、业务语义命名等手段,使卫语句清晰表达业务断言。

直接用提前返回把异常分支拎到前面,主逻辑自然就浮到顶层,缩进没了,读起来也顺。
把校验失败的场景提前拦截
别等所有条件都满足才开始干活,先扫一遍“不能干”的情况,不符合就立刻退出。比如参数为空、状态不对、权限不够——这些都不是主流程,拦住就行。
- if (user == null) throw new IllegalArgumentException("用户不能为空");
- if (!order.isPayable()) return Result.fail("订单不可支付");
- if (config == null || config.getTimeout()
每个校验单独成句,不堆在同一个 if 里
别写 if (a != null && b > 0 && c.isValid()) 这种大杂烩。拆开,一层一层来,失败时能准确定位问题,也方便加不同提示。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 先 check a 是否存在,报 “缺少必要参数”
- 再 check b 是否合法,报 “数值超出范围”
- 最后 check c 状态,报 “当前不支持该操作类型”
用否定逻辑替代 else 块
原来写 if (valid) { 主逻辑 } else { 错误处理 },其实 else 就是干扰项。改成 if (!valid) { 错误处理; return; },后面直接跟主逻辑,少一层缩进,眼睛轻松一档。
- 适合权限判断:if (!hasPermission("DELETE")) return forbidden();
- 适合状态过滤:if (task.getStatus() != TaskStatus.PENDING) return;
- 适合 DAO 预检:if (record == null) throw new RecordNotFoundException(id);
结合业务语义命名,让卫语句自己说话
条件判断不是技术检查,而是业务断言。方法名和条件表达要像人话,一眼看懂它在守什么规矩。
- 不用 if (status == 2),而用 if (!isOrderShipped(order))
- 不用 if (list == null || list.size() == 0),而用 if (items.isEmpty())
- 不用 if (flag == 1),而用 if (isFeatureEnabled("promo_v2"))
不复杂但容易忽略:提前返回不是偷懒,是把“不该继续”的路径显式划出来,剩下的代码才真正值得细看。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










