本文目录导读:

  1. switch到底长什么样?
  2. 为什么要有switch?它和if-else比谁好?
  3. 一个容易踩的坑:忘记写break(穿透现象)
  4. 不同语言中的switch有什么差异?
  5. 什么时候不该用switch?

在编程学习的路上,你大概率会遇到这样一个关键词:switch,有些教材把它翻译成“开关”,有些则直接保留英文称呼,但无论叫什么,它的核心作用只有一个——根据一个变量的不同取值,执行不同的代码块

简单说,switch就是帮你告别写长串if-else的“优雅工具”,下面我们从零开始,把它彻底讲明白。


switch到底长什么样?

先看一段最常见的代码(以JavaScript为例):

let day = 3;

let dayName;

switch (day) {

case 1:

dayName = "星期一";

break;

case 2:

dayName = "星期二";

break;

case 3:

dayName = "星期三";

break;

default:

dayName = "未知";

}

console.log(dayName); // 输出:星期三

这个例子中,

switch

后面跟了一个变量

day

,然后在花括号里用

case

列举了不同的可能取值,当

day

等于3时,程序就跳到

case 3

那一行去执行,然后遇到

break

就跳出整个switch结构,不再往下执行。

就跳出整个switch结构,不再往下执行。

关键词理解:

switch

:开关、切换,决定走哪条路。

  • :开关、切换,决定走哪条路。
  • case

    :情况、案例,列举每一个具体的条件。

  • :情况、案例,列举每一个具体的条件。
  • break

    :打破、跳出,防止代码继续向下执行(即“穿透”)。

  • :打破、跳出,防止代码继续向下执行(即“穿透”)。
  • default

    :默认,当所有

    case

    都不匹配时执行。

  • 都不匹配时执行。

  • 为什么要有switch?它和if-else比谁好?

    假设你要根据一个数字(1~5)输出对应的中文数字,用if-else写出来是这样的:

    if (num === 1) {

    console.log("一");

    } else if (num === 2) {

    console.log("二");

    } else if (num === 3) {

    console.log("三");

    } else if (num === 4) {

    console.log("四");

    } else if (num === 5) {

    console.log("五");

    } else {

    console.log("未知");

    }

    用switch写:

    switch (num) {

    case 1: console.log("一"); break;

    case 2: console.log("二"); break;

    case 3: console.log("三"); break;

    case 4: console.log("四"); break;

    case 5: console.log("五"); break;

    default: console.log("未知");

    }

    对比结论:

    • 可读性:switch把条件和结果整齐地对齐,一眼就能看出所有分支。
    • 性能:在分支较多时,switch的底层实现通常比一连串if-else更快(编译器会优化成跳转表)。
    • 适用场景:条件是固定常量(整数、字符、枚举等)时,用switch;条件是范围、复杂表达式(如num > 10

      )时,只能用if-else。

    • )时,只能用if-else。

    • 一个容易踩的坑:忘记写break(穿透现象)

      很多初学者会问:为什么我的switch执行了多个case?

      来看个例子:

      let score = 85;

      switch (true) {

      case score >= 90:

      console.log("优秀");

      case score >= 80:

      console.log("良好");

      case score >= 70:

      console.log("中等");

      default:

      console.log("一般");

      }

      // 输出:良好 中等 一般

      看到没?因为没有写

      break

      ,程序从匹配的

      case score >= 80

      开始,一直向下执行到结束,这叫做“穿透”

      开始,一直向下执行到结束,这叫做“穿透”

      穿透有时也是故意的——比如你想让多个条件共享一段代码:

      let fruit = "苹果";

      switch (fruit) {

      case "苹果":

      case "梨":

      case "香蕉":

      console.log("这是水果");

      break;

      default:

      console.log("不知道是什么");

      }

      // 输出:这是水果

      这里“苹果”“梨”“香蕉”都走同一个逻辑。


      不同语言中的switch有什么差异?

      主流编程语言几乎都有switch,但细节略有不同:

      语言语法特点注意事项
      C / C++ / Java只支持整数、字符、枚举(Java支持String)必须写break,否则穿透
      JavaScript支持任意类型(包括字符串、布尔值)也是必须写break
      Python没有switch,官方推荐用字典映射或if-elif需用match-case

      (Python 3.10+,类似switch但更强大)

      Go默认自带break,穿透需显式写

      fallthrough

      写法简洁,且case支持表达式
      Rust

      写法简洁,且case支持表达式
      Rust

      match

      ,功能极强,必须覆盖所有可能没有break,不会穿透
      ,功能极强,必须覆盖所有可能没有break,不会穿透


      什么时候不该用switch?

      1. 条件太复杂:比如if (a > 10 && b < 5)

        无法用switch表达。

      2. 无法用switch表达。
      3. 分支太少:只有2~3个分支时,if-else更简洁。
      4. 需要动态计算:比如不是比较固定值,而是比较函数返回值、正则匹配等。

      5. switch是编程中一种多分支选择结构,它让你把“一个变量的多种可能结果”清晰地写出来,记住三个关键点:

        1. 写break(除非你特意需要穿透)。
        2. 条件必须是固定的可比较值(整数、字符、枚举、字符串等)。
        3. 适用场景是分支较多且条件简单的等值判断。

        下次看到代码里有

        switch

        ,你就能立刻理解:它在根据某个值做分支跳转,就像现实中的多路开关——拨到哪一档,就接通哪一条电路。

        ,你就能立刻理解:它在根据某个值做分支跳转,就像现实中的多路开关——拨到哪一档,就接通哪一条电路。

        编程中switch什么意思?一篇讲透多分支选择结构-switch游戏下载社区