编程最佳实践-卫函数

卫函数要解决什么问题?

卫函数主要解决的是if嵌套太深导致的代码可读性差的问题。实际开发场景中大家都见过类似于下面的代码,我称之为梦幻45度:
image.png
有人可能觉得10个嵌套非常夸张,滨少不才,真的见过,**红线看着是真舒服,if里面的代码看着是真累啊。**不说看到10个,看到3个4个,大家的感觉可能都是:
image.png
那么什么是卫函数,实际开发中应该如何使用,往下看。

什么是卫函数

卫函数是在函数或方法的开头检查输入参数或对象的状态是否满足函数的预期。如果不满足,函数将立即返回,避免进一步的处理。这样可以提高代码的可读性,减少代码的嵌套层次,并提前处理错误。
大白话就是及时return。

正确使用卫函数的心法

卫函数的核心心法是能不能使函数的控制流程更加清晰。看了很多《别再使用if-else》类似的文章,其实只是授人以鱼。
函数(方法)通常有单入口单出口的最佳实践写法。意思是一个方法最好只有1个return语句,如果函数中有多个return语句,那么函数的分支(退出点)就会变多,那么意味着单元测试也会变多,如果只有1个return我们只需要关注一个出口,当然这只是其中的一个点,本文主要不讨论这个。
那么卫函数的及时return是否就冲突了。我的理解:

  1. 卫语句确实可能会打破函数的单入口单出口原则,但是这并不一定是坏事。单入口单出口原则的主要目的是为了使函数的控制流程更加清晰和易于理解。然而,在某些情况下,使用卫语句可能会使函数的控制流程更加清晰。
  2. 卫语句通常用于检查函数的前置条件,如果这些条件不满足,函数会立即返回。这样可以减少函数主体的嵌套层次,使函数的主要逻辑更加突出。因此,即使卫语句打破了单入口单出口原则,但是如果它可以使函数的逻辑更加清晰,那么使用卫语句是合理的。

看完以上你是否对卫函数有新的理解,为了加深理解,有眼前一亮的感觉吗?当初有个叫滨少的人给我说了他的理解,我直接就是
*image.png

卫函数推荐使用场景

卫函数推荐的使用场景推荐是简单的场景,不要有复杂的逻辑,以下是常见使用场景

检查输入参数

在函数开始时使用卫函数检查输入参数是否满足预期的条件。如果不满足,可以立即返回错误或抛出异常,而不是继续执行可能会失败的后续代码。

public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("Age cannot be negative");
    }
    this.age = age;
}

处理特殊情况

如果函数有一些特殊的情况可以立即处理并返回结果,那么使用卫函数可以使代码更清晰。例如,如果一个函数在列表为空时返回一个默认值,可以使用卫语句来处理这种情况。

public int getFirst(List<Integer> list) {
    if (list == null || list.isEmpty()) {
        return -1; // default value
    }
    return list.get(0);
}

减少嵌套

卫函数可以减少代码的嵌套深度,使主要的逻辑更加突出。如果一个函数有多个条件需要满足才能执行主要的逻辑,那么可以使用卫语句来处理不满足条件的情况。

public void process(Order order) {
    if (order == null) {
        return;
    }
    if (order.getStatus() != OrderStatus.PENDING) {
        return;
    }
    // main logic
}

卫函数不推荐使用场景示例

假设我们有一个订单处理系统,其中有一个方法用于处理订单。这个方法首先会检查订单的状态,然后根据订单的状态执行不同的操作。如果订单的状态是“待支付”,那么方法会执行支付操作;如果订单的状态是“待发货”,那么方法会执行发货操作;如果订单的状态是“已完成”,那么方法会执行完成操作。在这种情况下,我们不能简单地使用卫语句来检查订单的状态,因为每种状态都需要执行不同的操作。

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayden 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值