有没有一种编程语言对 switch 的中断语句有更好的方法?

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

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

}

现在,您所知道的语句是必需的,因为当语句丢失时,将一直持续到下一个语句。我们有一个示例,其中包含 、 和 。问题是,我们只需要这种“跳到下一个案例”非常非常少。而且很多时候,我们在 的末尾放置了休息时间。breakswitchcasebreakOPTION_LIKE_ONEOPTION_ONE_SIMILAROPTION_TWO_WITH_PRE_ACTIONcase

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

我想问一下,是否有任何我不知道(或忘记)的其他语言可以处理这样的开关/情况:

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中采用当前的中断方法是否有任何历史意义?也许继续下一个案例的使用频率远远超过我们这些天使用它?


答案 1

本文中,我可以列举一些不需要 -like 语句的语言:break

  1. 艾达(无跌倒)
  2. 埃菲尔铁塔(无下陷)
  3. 帕斯卡(无下滑)
  4. 去 -fallthrough
  5. Perl -continue
  6. 红宝石(无回退)
  7. VB、VBA、VBS、VB.NET(无故障)
  8. 由其他人继续...

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


答案 2

在这些情况下,Scala模式匹配我认为是一个巨大的改进。:)

object MatchTest2 extends Application {
  def matchTest(x: Any): Any = x match {
    case 1 => "one"
    case "two" => 2
    case y: Int => "scala.Int"
  }
  println(matchTest("two"))
}

来自 scala-lang.org 的样本