switch (c) { case 'y': case 'Y': // yes break; default: // no break; }
lneoi
2020-04-12 19:25:43 +08:00
开始学的时候感觉这是个缺陷,但在用的时候常常会用到二楼的情况,所以感觉还不错
Mithril
2020-04-12 19:27:45 +08:00
算不上是缺陷吧,只是不同的实现方法而已。最早期的那些语言也有两种不同实现方式的。Pascal 系列的基本都自带 break,相当于连着好几个 if,但是你可以在 case 里面写好几个值。然后 C 系列的语言都支持这种 case 语句的 fall through,实际上就是一堆的 goto 。 但就算是 C 语言,这个 fall through 也不是很常用。哪怕是最老的那些 C 语言编译器的代码,也只有很少的 switch 语句用到了 fall through 。而继承自 C 语言的一系列现代编程语言基本都保留了这个功能,或者像 C#一样优化了一下,只允许空的 case 语句进行 fall through 避免意外。
xiri
2020-04-12 19:33:57 +08:00
确实,二楼那种场景很有用,y/Y/yes/YES 写在一起就行了
mxalbert1996
2020-04-12 19:42:28 +08:00
这个功能有时候确实是有用的,所以我觉得像 Swift 那样默认 break 并且支持显式 fallthrough 就挺好的。
自动 break 的话下面这样的代码就不能实现了 ```java switch (str){ case "a": case "b": case "c": doA(); break; case "d": doD(); break; } ``` 要写成: ```java switch (str){ case "a": doA(); case "b": doA(); case "c": doA(); case "d": doD(); break; } ```
chenliangngng
2020-04-12 20:41:19 +08:00
duff 算法,就是利用 switch 默认不 break 的特点,实现大数据循环的,比正常的 for 循环快得多,可以了解下
reus
2020-04-12 20:44:00 +08:00
@xuanbg case 'a', 'b', 'c': doA(); case 'd': doB().