java - 有没有一种编程语言可以更好地处理 switch 的 break 语句?

标签 java c language-agnostic programming-languages switch-statement

在太多语言中它的语法相同:

switch (someValue) {

  case OPTION_ONE:
  case OPTION_LIKE_ONE:
  case OPTION_ONE_SIMILAR:
    doSomeStuff1();
    break; // EXIT the switch

  case OPTION_TWO_WITH_PRE_ACTION:
    doPreActionStuff2();
    // the default is to CONTINUE to next case

  case OPTION_TWO:
    doSomeStuff2();
    break; // EXIT the switch

  case OPTION_THREE:
    doSomeStuff3();
    break; // EXIT the switch

}

现在,你所知道的 break语句是必需的,因为 switch会继续下case什么时候break语句丢失。我们有一个例子 OPTION_LIKE_ONE , OPTION_ONE_SIMILAROPTION_TWO_WITH_PRE_ACTION .问题是我们很少需要这种“跳到下一个案例”。我们经常把 break 放在 case 的末尾.

初学者很容易忘记它。我的一位 C 老师甚至向我们解释它,好像它是 C 语言中的一个错误(不想谈论它:)

我想问一下是否还有其他我不知道(或忘记)的语言可以像这样处理 switch/case:

switch (someValue) {

  case OPTION_ONE:  continue; // CONTINUE to next case
  case OPTION_LIKE_ONE:  continue; // CONTINUE to next case
  case OPTION_ONE_SIMILAR:
    doSomeStuff1();
    // the default is to EXIT the switch

  case OPTION_TWO_WITH_PRE_ACTION:
    doPreActionStuff2();
    continue; // CONTINUE to next case

  case OPTION_TWO:
    doSomeStuff2();
    // the default is to EXIT the switch

  case OPTION_THREE:
    doSomeStuff3();
    // the default is to EXIT the switch

}

第二个问题:为什么我们在 C 中使用当前的 break 方法有什么历史意义吗?也许继续下一个 case 比我们现在使用的更频繁?

最佳答案

来自 this文章,我可以列举一些不需要类似break语句的语言:

  1. Ada(无失败)
  2. Eiffel(无漏电)
  3. Pascal(无 fallthrough)
  4. Go - fallthrough
  5. Perl - 继续
  6. Ruby(无 fallthrough)
  7. VB、VBA、VBS、VB.NET(无 fallthrough)
  8. 由其他人继续...

你的第二个问题很有趣。假设只有 C,我相信这个决定保持了语言的凝聚力。由于 break 是一个跳跃,因此必须显式编写。

关于java - 有没有一种编程语言可以更好地处理 switch 的 break 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3014668/

相关文章:

C++ 2 嵌套for循环转换为递归

c - 奇怪的代码崩溃问题?

parsing - 最左推导是什么意思?

language-agnostic - 将二维网格映射到球体上

java - tomcat docker-compose 无法访问共享卷

c - 使用 GCC 的 Nasm 内联汇编

java - 使用 JAXB 解码列表

security - 何时禁用登录表单上的 "save password"功能?

java - 从 native java 应用程序启动可运行的运行

java - Gradle lint 和测试构建错误 - JAXBException 和库中无效的包引用