当前位置:首页 > 科技  > 软件

Go 重构:尽量避免使用 else、break 和 continue

来源: 责编: 时间:2023-11-01 17:05:27 413观看
导读今天,我想谈谈相当简单的事情。我不会发明什么,但我在生产代码中经常看到这样的事情,所以我不能回避这个话题。我经常要解开多个复杂的 if else 结构。多余的缩进、过多的逻辑只会加深理解。首先,这篇文章的主要目的是让

今天,我想谈谈相当简单的事情。我不会发明什么,但我在生产代码中经常看到这样的事情,所以我不能回避这个话题。9fT28资讯网——每日最新资讯28at.com

我经常要解开多个复杂的 if else 结构。多余的缩进、过多的逻辑只会加深理解。首先,这篇文章的主要目的是让代码更透明、更易读。不过,在某些情况下还是必须使用这些操作符。9fT28资讯网——每日最新资讯28at.com

9fT28资讯网——每日最新资讯28at.com

else 操作

例如,我们有简单的用户处理程序:9fT28资讯网——每日最新资讯28at.com

func handleRequest(user *User) {    if user != nil {        showUserProfilePage(user)    } else {        showLoginPage()    }}

如果没有提供用户,则需要将收到的请求重定向到登录页面。If else 似乎是个不错的决定。但我们的主要任务是确保业务逻辑单元在任何输入情况下都能正常工作。因此,让我们使用提前返回来实现这一点。9fT28资讯网——每日最新资讯28at.com

func handleRequest(user *User) {    if user == nil {        return showLoginPage()    }     showUserProfilePage(user)}

逻辑是一样的,但是下面的做法可读性会更强。9fT28资讯网——每日最新资讯28at.com

break 操作

对我来说,Break 和 Continue 语句总是可以分解的信号。9fT28资讯网——每日最新资讯28at.com

例如,我们有一个简单的搜索任务。找到目标并执行一些业务逻辑,或者什么都不做。9fT28资讯网——每日最新资讯28at.com

func processData(data []int, target int) {    for i, value := range data {        if value == target {            performActionForTarget(data[i])            break        }    }}

你应该始终记住,使用 break 操作符并不能保证整个数组都会被处理。这对性能有好处,因为我们丢弃了不必要的迭代,但对代码支持和可读性不利。因为我们永远不知道程序会在列表的开头还是结尾停止。9fT28资讯网——每日最新资讯28at.com

在某些情况下,带有子任务的简单功能可能会破坏这段代码。9fT28资讯网——每日最新资讯28at.com

func processData(data []int, target int, subtask int) {    for i, value := range data {        if value == subtask {            performActionForSubTarget(data[i])        }        if value == target {            performActionForTarget(data[i])            break        }    }}

这样我们实际上可以拆出一个 find 的方法:9fT28资讯网——每日最新资讯28at.com

func processData(data []int, target int, subTarget int) {    found := findTarget(data, target)    if found > notFound {        performActionForTarget(found)    }    found = findTarget(data, subTarget)    if found > notFound {        performActionForSubTarget(found)    }}const notFound = -1func findTarget(data []int, target int) int {    if len(data) == 0 {        return notFound    }    for _, value := range data {        if value == target {            return value        }    }    return notFound}

同样的逻辑,但是拆分成更细粒度的方法,也有精确的返回语句,可以很容易地通过测试来实现。9fT28资讯网——每日最新资讯28at.com

continue 操作

该操作符与 break 类似。为了正确阅读代码,您应该牢记它对操作顺序的具体影响。9fT28资讯网——每日最新资讯28at.com

func processWords(words []string, substring string) {    for _, word := range words {        if !strings.Contains(word, substring) {            continue        }                // do some buisness logic        performAction(word)    }}

Continue 使得这种简单的流程变得有点难以理解。9fT28资讯网——每日最新资讯28at.com

让我们写得更简洁些:9fT28资讯网——每日最新资讯28at.com

func processWords(words []string, substring string) {    for _, word := range words {        if strings.Contains(word, substring) {            performAction(word)        }    }}

本文链接:http://www.28at.com/showinfo-26-16385-0.htmlGo 重构:尽量避免使用 else、break 和 continue

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python十大常用库:让你的Python编程更上一层楼

下一篇: Java循环的终止方式

标签:
  • 热门焦点
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾“低价”口号。而过去与他们错位竞争的拼多多,靠
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
Top