本文目录导读:

  1. Switch语句是什么?
  2. Switch语句的“长相”(基本语法)
  3. if-else

    而要用

    switch

    ?">为什么不用

    if-else

    而要用

    switch

  4. Switch语句的“高级玩法”(现代语法)
  5. 一个完整的案例带你理解
  6. 一个变量可能有多种不同的值,而你需要根据这些不同的值,执行不同的操作?

    根据用户输入的数字1到7,打印出“星期一”到“星期日”,或者,根据订单的状态码(0:待支付,1:已支付,2:已发货,3:已完成),执行不同的业务逻辑。

    面对这种“多选一”的场景,很多初学者会下意识地使用一连串的

    if-else if-else

    语句,虽然这样能解决问题,但当分支数量增多时,代码会变得冗长、可读性差,且容易出错。

    语句,虽然这样能解决问题,但当分支数量增多时,代码会变得冗长、可读性差,且容易出错。

    这时候,就需要请出我们今天的主角:Switch语句

    Switch语句是什么?

    Switch语句是一种用于执行“多路分支”选择的结构化控制流语句

    它的核心思想是:将一个表达式的结果,与一系列预先定义好的“case”标签中的常量进行比较,一旦找到匹配项,就执行该标签下对应的代码块。

    你可以把它想象成一个精准的“分拣机”

    1. 输入(表达式):把需要判断的值(比如一个整数、字符)放入分拣机。
    2. 分拣口(Case):分拣机里有多个标记好的分拣口,每个口对应一个特定的值(如 1、2、3...)。
    3. 执行动作:当表达式值与某个分拣口的值一致时,就触发该分拣口对应的动作。
    4. 默认出口(Default):如果所有分拣口都不匹配,则触发一个默认的出口。

    Switch语句的“长相”(基本语法)

    虽然不同编程语言(如C、Java、JavaScript、C#)的Switch语法略有差异,但核心结构大同小异,我们以最常用的形式为例:

    switch (表达式) {

    case 值1:

    // 当表达式 === 值1 时,执行这里的代码

    break; // 执行完跳出switch,防止“贯穿”到下一个case

    case 值2:

    // 当表达式 === 值2 时,执行这里的代码

    break;

    case 值3:

    // 当表达式 === 值3 时,执行这里的代码

    break;

    // ... 可以有更多case

    default:

    // 如果表达式与任何case都不匹配,执行这里的代码

    break;

    }

    关键角色介绍:

    • 表达式:这是被评估的对象,它通常是一个变量、一个简单的运算结果,或者常量,这个表达式的类型需要与case

      的值类型兼容。

    • 的值类型兼容。
    • case 值:一个具体的、常量表达式(不能是变量或范围),它定义了程序需要匹配的“路牌”。
    • break

      关键字非常重要!当程序执行完某个

      case

      的代码后,

      break

      的作用是立即跳出整个

      switch

      结构,防止程序“掉下去”继续执行下一个

      case

      的代码,这个现象叫做“贯穿”(Fall-through)。

    • 的代码,这个现象叫做“贯穿”(Fall-through)。
    • default

      关键字:一个可选的“兜底”选项,当表达式的值与所有

      case

      都不匹配时,就执行这里的代码,它通常放在最后。

    • 都不匹配时,就执行这里的代码,它通常放在最后。
    • 为什么不用

      if-else

      而要用

      switch

      这可能是你最关心的问题,两者之间的选择,主要看场景:

      特性
      if-else

      语句

      Switch

      语句判断条件可以处理复杂的、非恒等的条件(如

      a > 10 && b < 5

      )只能处理“值与某个常量是否相等”的比较可读性当分支多于4-5个时,代码会变得嵌套、难以阅读结构清晰,扁平化,一目了然,尤其适合处理离散映射关系性能在分支很多时,通常比

      switch

      慢某些语言/编译器会对

      switch

      进行优化(如使用跳转表),在分支多时性能更优适用类型可判断任意类型、任意布尔表达式主要适用于整数、字符、枚举以及部分语言支持的

      string

      类型(在Java 7+、C# 7+中)

      类型(在Java 7+、C# 7+中)
    • if-else

      的场景:需要判断范围(如

      score >= 60

      )、需要做多重逻辑组合、或者分支数量很少(1-2个)。

    • )、需要做多重逻辑组合、或者分支数量很少(1-2个)。
    • switch

      的场景:判断的是一个固定、离散的值列表(如菜单选项、状态码、星期几、月份),并且分支较多时,它让代码更像“配置”而非“逻辑”。

    • 的场景:判断的是一个固定、离散的值列表(如菜单选项、状态码、星期几、月份),并且分支较多时,它让代码更像“配置”而非“逻辑”。
    • Switch语句的“高级玩法”(现代语法)

      随着语言的发展,许多现代编程语言(如Java 14+、C# 8+、JavaScript/TypeScript)为

      switch

      语句引入了更强大、更优雅的语法形式,通常被称为“Switch 表达式”“模式匹配”,它不再是一个语句,而是一个可以返回值的“表达式”。

      语句引入了更强大、更优雅的语法形式,通常被称为“Switch 表达式”“模式匹配”,它不再是一个语句,而是一个可以返回值的“表达式”。

      以 JavaScript/TypeScript 为例:

      // 传统 Switch

      function getDayName_old(day) {

      let name;

      switch (day) {

      case 1: name = "Mon"; break;

      case 2: name = "Tue"; break;

      // ...

      default: name = "Unknown";

      }

      return name;

      }

      // 现代 Switch 表达式(更简洁、更安全)

      function getDayName_new(day) {

      return getDayName(day) {

      case 1 => "Mon"; // 直接返回值

      case 2 => "Tue";

      case 3 => "Wed";

      // ...

      default => "Unknown"; // 甚至可以省略 default,如果覆盖所有 case

      };

      }

      现代Switch表达式的优势:

    • 更简洁:去掉了
    • break

      return

      等冗余关键字。

    • 等冗余关键字。
    • 更安全:使用
    • =>

      箭头,避免了传统

      switch

      因忘记写

      break

      而导致的“贯穿”错误。

    • 而导致的“贯穿”错误。
    • 可作为表达式:可以直接赋值给变量或作为函数返回值,使代码更函数式。
    • 功能更强大:逐渐支持模式匹配,甚至可以匹配数据类型、结构等(如C# 9+、Rust)。
    • 一个完整的案例带你理解

      假设我们写一个根据订单“状态码”决定显示文字的函数,状态码定义如下:

      • 0

        :待支付

      • :待支付
      • 1

        :已支付

      • :已支付
      • 2

        :已发货

      • :已发货
      • 3

        :已完成

      • :已完成
      • 其他:未知状态
      • 使用传统

        switch

        语句(Java / C# / JavaScript 风格):

        语句(Java / C# / JavaScript 风格):

        public String getStatusText(int statusCode) {

        String statusText;

        switch (statusCode) {

        case 0:

        statusText = "待支付";

        break;

        case 1:

        statusText = "已支付";

        break;

        case 2:

        statusText = "已发货";

        break;

        case 3:

        statusText = "已完成";

        break;

        default:

        statusText = "未知状态";

        break;

        }

        return statusText;

        }

        使用现代

        switch

        表达式(Java 14+ 风格):

        表达式(Java 14+ 风格):

        public String getStatusText(int statusCode) {

        return switch (statusCode) {

        case 0 -> "待支付";

        case 1 -> "已支付";

        case 2 -> "已发货";

        case 3 -> "已完成";

        default -> "未知状态";

        };

        }

        可以看到,现代版本不仅代码量更少,而且逻辑更清晰,消除了潜在的错误(忘记

        break

        )。

        )。

        Switch语句不是

        if-else

        的替代品,而是其特定场景下的“效率工具”。当你面对一个“根据一个离散值做多选一”的问题时,

        switch

        是你的不二之选,它让代码更干净、更易读,甚至在某些情况下性能更好。

        是你的不二之选,它让代码更干净、更易读,甚至在某些情况下性能更好。

        希望你现在已经理解了

        switch

        语句到底是什么意思,不妨找一些实际场景(比如写一个简易计算器根据运算符做加减乘除),动手尝试一下吧!

        语句到底是什么意思,不妨找一些实际场景(比如写一个简易计算器根据运算符做加减乘除),动手尝试一下吧!

        从选择困难到精准决策,Switch语句到底是什么意思?-switch游戏下载社区