《100个Go语言典型错误》精读笔记 - 不必要的嵌套代码

典型问题2:不必要的嵌套代码

层次嵌套过多问题

在业务逻辑中,如果代码层次嵌套层次过多,会导致难以理解代码表达的逻辑。

下面join函数是要连接两个字符串,当s1或s2为空时,返回错误。该函数共有4层嵌套,虽然业务逻辑正确,但难以理解。

func join(s1, s2 string, max int) (string, error) {
    if s1 == "" {
        return "", errors.New("s1 is empty")
    } else {
        if s2 == "" {
            return "", errors.New("s2 is empty")
        } else {
            concat, err := concatenate(s1, s2)
            if err != nil {
                return "", err
            } else {
                if len(concat) > max {
                    return concat[:max], nil
                } else {
                    return concat, nil
                } 
            }
        }
    }
}
            
func concatenate(s1 string, s2 string) (string, error) {
    // ...

}

如何避免代码嵌套过多

避免代码层级嵌套过多,需要遵守“尽早返回”的原则。具体如下:

  • if中若有return,则忽略后面的else

  • 翻转if-else逻辑,尽早返回

上述join函数改进后的逻辑,如下

func join(s1, s2 string, max int) (string, error) {
  if s1 == "" {
    return "", errors.New("s1 is empty")
  }
  if s2 == "" {
    return "", errors.New("s2 is empty")
  }
  concat, err := concatenate(s1, s2)
  if err != nil {
    return "", err
  }
  if len(concat) > max {
    return concat[:max], nil
  }
  return concat, nil
}

func concatenate(s1 string, s2 string) (string, error) {
    // ...

让代码具备高可读性对于研发者是非常有挑战的,因此,不要想着一次就把代码写好。在研发过程中持续的 “重构”。

下一节,介绍滥用init函数导致的问题以及如何避免的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

渔夫子@Go学堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值