什么是卫语句?卫语句主要被用来解决什么问题?怎么编写卫语句?

一、前言

        阅读07 滥用控制语句:出现控制结构,多半是错误的提示文章有感,想知道为什么说的那么绝对。

二、什么是卫语句

        卫语句(Guard Clause)是一种提前返回的代码风格:在函数入口处(或关键节点)用一系列简短、正向的条件判断把“异常/特殊/不满足继续执行”的场景拦截下来,并立即 return 或 throw;剩下的主流程就可以不再嵌套地自然展开。它本质上是一种“先排除错误路径,再处理正常路径”的逆向思维 。

三、卫语句主要解决什么问题

1. 消灭深层嵌套

        把“金字塔”式的 if-else 改为平铺的 if-return,降低圈复杂度 。

图片来源于网络

2. 突出主干逻辑

        异常分支被提前处理后,剩余代码就是“真正的业务”,阅读时不用再在大括号里找主干 。

3. 提高可读性、可维护性

        符合《阿里巴巴 Java 开发手册》“超过 3 层 if-else 必须用卫语句/策略模式/状态模式重构”的规范 。

四、如何编写卫语句(步骤 + 示例)

1. 找出所有提前结束的条件

        – 参数校验失败

        – 特殊状态直接返回

        – 循环中的 continue/break 场景

2. 把条件取反,写成最外层 if,并立即 return/throw

        – 每个 if 只做一件事,函数因此可以有多个出口。

        – 如果多个卫语句最终返回同一结果,可再使用“合并条件表达式”重构 。

3. 示例对比

// 重构前:层层嵌套
public void handle(int t) {
    if (t == 1) {
        return;
    } else {
        if (t == 2) {
            return;
        } else {
            if (t == 3) {
                return;
            } else {
                set();   // 主干逻辑
            }
        }
    }
}

// 重构后:卫语句
public void handle(int t) {
    if (t == 1) return;
    if (t == 2) return;
    if (t == 3) return;

    set();   // 主干逻辑平铺在最外层
}

五、编写小贴士

  • 每个卫语句后立即 return/throw,不要再写 else。
  • 保持卫语句本身简短;复杂判断可提取成私有方法。
  • 不要因为“单一出口”教条而强行合并 return,清晰优先

六、参考资料

     07 滥用控制语句:出现控制结构,多半是错误的提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值