卫语句通过提前返回异常分支实现代码扁平化,逐层校验并精准提示错误,用否定逻辑替代else嵌套,结合业务语义命名提升可读性与健壮性。

直接反转 if 条件、配合提前返回,是最轻量也最有效的扁平化手段。它不依赖额外设计模式或结构改造,只要调整判断顺序和出口位置,就能让主干逻辑浮到顶层,一眼看清“正常路径”。
用卫语句拦截异常分支
把校验失败、参数非法、状态不满足等“非主流程”情况,统一前置处理并快速退出。这样后续代码无需缩进,也不用套在 else 里。
- 检查空值:if (obj == null) throw new IllegalArgumentException("obj must not be null");
- 检查业务约束:if (!user.isActive()) return Result.fail("User is disabled");
- 检查前置条件:if (order.getStatus() != OrderStatus.CREATED) return;
每一条卫语句都像一道守门人,拦住不该继续的请求,剩下的代码自然干净利落。
把正向判断拆成多个独立卫句
不要在一个 if 里堆叠多个条件(如 if (a != null && b > 0 && c.isValid())),而是逐层剥离、分句校验。这样错误定位更准,日志/异常信息也更有针对性。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 先判 a 是否为空,再判 b 是否合法,最后校验 c 的状态
- 每个条件失败时可给出不同提示,比如 “Missing config key” 或 “Invalid timeout value”
- 避免因一个条件短路导致其他校验被跳过,增强健壮性
用否定逻辑替代嵌套 else 块
原始写法常是 if (valid) { ... } else { error(); } —— 这个 else 块本质就是干扰项。改成 if (!valid) { error(); return; },后面直接写主逻辑,缩进降一级,视觉负担明显减轻。
- 适用于所有二元判断场景,如权限检查、开关控制、状态过滤
- 尤其适合 DAO 层操作前的预检:if (record == null) throw RecordNotFoundException.withId(id);
- 主流程不再被“else {”包裹,阅读时无需来回跳转匹配花括号
结合领域语义命名强化可读性
卫语句不只是语法技巧,更是表达意图的机会。方法名或条件描述应体现业务含义,而不是技术细节。
- 不用 if (status == 1),而用 if (!isOrderConfirmed(order))
- 不用 if (list.size() == 0),而用 if (items.isEmpty())
- 确保每个卫语句读起来像一句自然语言断言:“订单未确认,拒绝处理”
逻辑变浅了,语义变清了,改起来也更放心。

















