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

这篇具有很好参考价值的文章主要介绍了Go 重构:尽量避免使用 else、break 和 continue。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

else 操作
例如,我们有简单的用户处理程序:

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

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

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

逻辑是一样的,但是下面的做法可读性会更强。
break 操作
对我来说,Break 和 Continue 语句总是可以分解的信号。
例如,我们有一个简单的搜索任务。找到目标并执行一些业务逻辑,或者什么都不做。

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

你应该始终记住,使用 break 操作符并不能保证整个数组都会被处理。这对性能有好处,因为我们丢弃了不必要的迭代,但对代码支持和可读性不利。因为我们永远不知道程序会在列表的开头还是结尾停止。
在某些情况下,带有子任务的简单功能可能会破坏这段代码。

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 的方法:

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 = -1

func findTarget(data []int, target int) int {
    if len(data) == 0 {
        return notFound
    }

    for _, value := range data {
        if value == target {
            return value
        }
    }

    return notFound
}

同样的逻辑,但是拆分成更细粒度的方法,也有精确的返回语句,可以很容易地通过测试来实现。
continue 操作
该操作符与 break 类似。为了正确阅读代码,您应该牢记它对操作顺序的具体影响。

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

Continue 使得这种简单的流程变得有点难以理解。
让我们写得更简洁些:文章来源地址https://www.toymoban.com/news/detail-739606.html

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

到了这里,关于Go 重构:尽量避免使用 else、break 和 continue的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在使用Python 3中的循环时如何使用break、continue和pass语句

    简介 在 Python 中使用 for 循环 和 while 循环 可以让你以高效的方式自动化和重复任务。 但有时,外部因素可能会影响程序的运行方式。当发生这种情况时,你可能希望程序完全退出循环,跳过部分循环然后继续,或者忽略那个外部因素。你可以使用 break 、 continue 和 pass 语句

    2024年01月24日
    浏览(47)
  • Python循环语句——continue和break

    在Python编程中,循环是常见的控制流语句,它允许我们重复执行一段代码,直到满足某个条件为止。而在循环中,continue和break是两个非常重要的控制语句,它们可以帮助我们更加灵活地控制循环的行为。 continue语句用于跳过当前循环的剩余部分,并立即开始下一次迭代。它常

    2024年02月20日
    浏览(47)
  • 尽量避免删改List

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年02月03日
    浏览(43)
  • C++ Break、Continue 和 数组操作详解

    break 语句还可以用来跳出循环。 在以下示例中,当 i 等于 4 时跳出循环: 以下示例跳过了值为 4 的情况: 你也可以在 while 循环中使用 break 和 continue : Break 示例 Continue 示例 数组用于在单个变量中存储多个值,而不是为每个值声明单独的变量。 要声明数组,请定义变量类型

    2024年04月08日
    浏览(53)
  • Shell脚本break和continue语句应用

    记录 :436 场景 : Shell脚本break和continue语句应用。在for、while循环中使用break和continue语句。 版本 :CentOS Linux release 7.9.2009。 1. break和continue语句 break语句用来结束循环语句,会跳出循环,不再执行循环语句。比如for循环、while循环等。 continue语句用来结束本次循环,直接跳到

    2024年02月06日
    浏览(69)
  • C# Break 和 Continue 语句以及数组详解

    它被用于“跳出” switch 语句。 break 语句也可用于跳出循环。 以下示例在 i 等于 4 时跳出循环: 示例: continue 语句在循环中发生特定条件时中断一次迭代,并继续进行下一次迭代。 以下示例跳过了值为 4 的情况: 示例 在 While 循环中使用 Break 和 Continue 您也可以在 while 循环

    2024年01月23日
    浏览(46)
  • Linux centos7 bash编程(break和continue)

    在学习shell知识时,简单编程要从格式入手。 首先学习好单行注释和多行注释。 先学习简单整数的打印输出,主要学习 echo 命令,学习选项-e -n的使用。 下面的练习是常用的两个分支跳转程序: break 和 continue 。 #!/bin/bash # 这是 单行注释 # 单行注释的方法就是在每行行首添加

    2024年02月10日
    浏览(39)
  • Java的list.forEach能否实现continue和break

    Java的forEach是一个方便的遍历集合的方法,它的实现方式不允许使用continue语句来跳过某些元素,但可以使用return语句来达到类似continue的效果,也就是说在需要使用continue;的位置直接使用return;替代即可。例如: forEach循环是一种基于迭代器的循环方式,不支持使用break语句来

    2024年02月16日
    浏览(45)
  • 深入解析 C 语言中的 for 循环、break 和 continue

    当您确切地知道要循环执行代码块的次数时,可以使用  for  循环而不是  while  循环 语句 1 在执行代码块之前执行(一次)。 语句 2 定义执行代码块的条件。 语句 3 在执行代码块后执行(每次)。 下面的示例将打印数字 0 到 4: 示例 示例解释 语句 1 在循环开始之前设置

    2024年02月04日
    浏览(39)
  • 【Python入门篇】——Python中循环语句(循环中断break和continue)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Python提供continue和

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包