编程语言中使用Fallthrough控制流

1 简介

在 Go 中,switch语句在执行switch匹配的 case 后自动中断。

与像 C 这样的语言不同,除非明确终止,否则 case 自然会失败,Go 需要关键字fallthrough来实现这种行为。这确保了控制流.

stateDiagram-v2 [*] --> Still Still --> [*] Still --> Moving Moving --> Still Moving --> Crash Crash --> [*]

fallthrough 是可选的 -- 可以通过显式声明来指定 fallthrough,如此匹配到后则直接退出 -- 不像其他语言那样需要 break

sequenceDiagram Alice->>John: Hello John, how are you? John-->>Alice: Great! Alice-)John: See you later!

2 示例:

例如Script 中的 switch 语句具有称为 fall-through 的行为,这可能会导致意外结果。我将解释这种行为是什么,如何避免它,以及它的用例。

Switch 语句允许您在 JavaScript 中创建条件语句。您有一个条件表达式,根据该表达式的返回值,您可以有不同的 case。将执行与该表达式匹配的 case。

go 复制代码
	func main() {
		switch "Marcus" {
		case "Tim":
			fmt.Println("Wassup Tim")
		case "Jenny":
			fmt.Println("Wassup Jenny")
		case "Marcus":
			fmt.Println("Wassup Marcus")
			fallthrough
		case "Medhi":
			fmt.Println("Wassup Medhi")
			fallthrough
		case "Julian":
			fmt.Println("Wassup Julian")
		case "Sushant":
			fmt.Println("Wassup Sushant")
		}
	}
  • 失败操作

我们研究 switch 语句中的直通行为。此行为涉及在表达式的匹配大小写之后执行其他 case。它默认发生,但可以通过break关键字来防止,正如我们在不同示例中看到的那样。

我们还看到了这种行为的好处,因为它有助于对相关案例进行分组。

当开始学习 JavaScript 时,很容易学会在 switch case 中的使用,但从未完全理解为什么。 以为break这只是 switch 语句的语法。

但只是过了一段时间,我才明白break这句话的作用------防止失败。

用于平台操作

go 复制代码
	switch syscall.OS {
	case "windows":
	    sd = &sysDir{
	        Getenv("SystemRoot") + `\system32\drivers\etc`,
	        []string{
	            "hosts",
	            "networks",
	            "protocol",
	            "services",
	        },
	    }
	case "plan9":
	    sd = &sysDir{
	        "/lib/ndb",
	        []string{
	            "common",
	            "local",
	        },
	    }
	default:
	    sd = &sysDir{
	        "/etc",
	        []string{
	            "group",
	            "hosts",
	            "passwd",
	        },
	    }
	}

要进入后续情况,请使用关键字:fallthrough,当前关键字判定后,将会判定连续的下一个。

Go 中的关键字提供了一种显式方法,可以继续执行语句中的下一个 case,而不管是否满足 next case 的条件。

虽然它的行为可能会让刚接触 Go 的开发人员感到惊讶,但如果经过深思熟虑地应用switch fallthrough,它会起到有用的作用。

3 小结

  • fallthrough优点

代码可重用性:允许在多个情况下共享逻辑,从而减少冗余。例如,需要相同处理步骤的作可能会落入共享逻辑。

简化顺序处理: 在案例相互构建或需要累积作的情况下,可以简化代码结构。

显式意图: 与其他语言中的隐式透传不同,Go 是有意为之的,让读者清楚地知道下一个情况将执行。

  • 缺点fallthrough

绕过 Case Conditions:不检查下一个 Case 的条件,如果不仔细管理,这可能会导致意外行为。

可读性降低: 在复杂的语句中,可能会掩盖控制流,使其他人(或未来的自己)更难理解逻辑。

Limited to Immediate Cases:仅将控制权移动到下一个情况,这与允许跳转到任意情况的其他控制流工具不同。

在本文中探讨了fallthrough 的工作原理 、它的优缺点,以及它在重用逻辑方面大放异彩的实际用例。

相关推荐
江城开朗的豌豆16 分钟前
Vue+JSX真香现场:告别模板语法,解锁新姿势!
前端·javascript·vue.js
这里有鱼汤24 分钟前
首个支持A股的AI多智能体金融系统,来了
前端·python
袁煦丞25 分钟前
5分钟搭建高颜值后台!SoybeanAdmin:cpolar内网穿透实验室第648个成功挑战
前端·程序员·远程工作
摸鱼仙人~26 分钟前
Vue.js 指令系统完全指南:深入理解 v- 指令
前端·javascript·vue.js
前端进阶者27 分钟前
支持TypeScript并打包为ESM/CommonJS/UMD三种格式的脚手架项目
前端
星空下的曙光27 分钟前
pnpm vs npm区别对比
前端·npm·node.js
啃火龙果的兔子28 分钟前
React 图标库发布到 npm 仓库
前端·react.js·npm
江城开朗的豌豆29 分钟前
Vue列表渲染的坑:为什么不能用index当key?血泪教训总结!
前端·javascript·vue.js
JiaLin_Denny30 分钟前
如何在在NPM发布一个React组件
前端·react.js·npm·npm组件·npm发布·npm发布组件·npm如何发布组件
第六页第七页序30 分钟前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js