本文目录导读:

  1. 从基本语法开始
  2. 从“穿透”到“合并”——灵活利用特性
  3. switch

    ">从传统到现代——语言演进中的

    switch
  4. 从使用陷阱到最佳实践
  5. 从入门到精通的总结
  6. 在编程的世界里,

    switch

    语句是一种经典而强大的控制结构,它允许程序根据一个表达式的值,从多个分支中选择一条执行路径,与冗长的

    if-else

    链相比,

    switch

    往往更清晰、更高效,本文将从基础语法出发,逐步深入,带你全面掌握

    switch

    的用法。

    的用法。

    从基本语法开始

    大多数主流语言(C、C++、Java、JavaScript、C# 等)的

    switch

    结构都大同小异,一个典型的例子如下(以C语言为例):

    结构都大同小异,一个典型的例子如下(以C语言为例):

    int day = 3;

    switch (day) {

    case 1:

    printf("周一");

    break;

    case 2:

    printf("周二");

    break;

    case 3:

    printf("周三");

    break;

    // ... 更多 case

    default:

    printf("未知");

    }

    关键点:

    switch

    后的表达式必须是整数类型(或可隐式转换为整数,如字符、枚举)。

  7. 后的表达式必须是整数类型(或可隐式转换为整数,如字符、枚举)。
  8. case

    后跟常量值,不能是变量或范围。

  9. 后跟常量值,不能是变量或范围。
  10. 每个
  11. case

    末尾通常需要

    break

    ,否则会发生“穿透”(fall-through)——即继续执行下一个

    case

    ,直到遇到

    break

    switch

    结束。

  12. 结束。
  13. default

    是可选的,用于处理所有未匹配的情况。

  14. 是可选的,用于处理所有未匹配的情况。
  15. 从“穿透”到“合并”——灵活利用特性

    “穿透”常常被视为陷阱,但它也可以成为工具,当多个

    case

    需要执行相同代码时,可以合并:

    需要执行相同代码时,可以合并:

    char grade = 'B';

    switch (grade) {

    case 'A':

    case 'B':

    case 'C':

    printf("通过");

    break;

    case 'D':

    case 'E':

    printf("补考");

    break;

    default:

    printf("不及格");

    }

    这种写法避免了重复代码,体现了

    switch

    的简洁性。

    的简洁性。

    从传统到现代——语言演进中的

    switch

    不同语言对

    switch

    的扩展差异很大,了解这些演进能帮你写出更优雅的代码。

    的扩展差异很大,了解这些演进能帮你写出更优雅的代码。

    JavaScript 的

    switch

    (严格相等)

    (严格相等)

    switch (fruit) {

    case 'apple':

    console.log('苹果');

    break;

    default:

    console.log('未知');

    }

    注意:JavaScript 的

    case

    使用 比较,不会发生类型转换。

    使用 比较,不会发生类型转换。

    Python 的

    match

    (3.10+)

    (3.10+)

    Python 没有传统

    switch

    ,但3.10引入了

    match-case

    ,功能更强大:

    ,功能更强大:

    match status:

    case 200:

    print("OK")

    case 404:

    print("Not Found")

    case _:

    print("Other")

    相当于

    default

    ,且支持模式匹配、解包等高级用法。

    ,且支持模式匹配、解包等高级用法。

    C# 的

    switch

    表达式(C# 8.0+)

    表达式(C# 8.0+)

    C# 将

    switch

    改写为表达式,可返回值:

    改写为表达式,可返回值:

    string result = day switch

    {

    1 => "周一",

    2 => "周二",

    _ => "未知"

    };

    更加简洁,且支持模式匹配、when 子句等。

    从使用陷阱到最佳实践

  16. 不要忘记
  17. break

    :最常见的 bug 就是漏掉

    break

    导致意外穿透,如果故意利用穿透,请务必加注释说明。

  18. 导致意外穿透,如果故意利用穿透,请务必加注释说明。
  19. 避免过长的
  20. switch

    :当分支超过七八个时,考虑用查找表(数组/字典)或策略模式代替。

  21. :当分支超过七八个时,考虑用查找表(数组/字典)或策略模式代替。
  22. 注意作用域:在
  23. case

    中声明变量时,如果不同

    case

    共用同一作用域块(未加花括号),可能导致重复定义错误,C 语言中建议每个

    case

    用 包裹。

  24. 用 包裹。
  25. 性能考虑:编译器通常会对
  26. switch

    优化为跳转表(当

    case

    值密集且连续时),比

    if-else

    链更快,但不要过早优化,可读性优先。

  27. 链更快,但不要过早优化,可读性优先。
  28. 从入门到精通的总结

    switch

    不是万能的,但在处理多个固定值的分支判断时,它比

    if-else

    更直观、更高效,从基础的

    case-break

    到现代语言的模式匹配,

    switch

    一直在进化,掌握它,你就能在代码中优雅地从多个选项中快速跳转到正确的处理路径——这正是“switch from”的精髓:从一个表达式的值出发,切换到对应的执行逻辑。

    一直在进化,掌握它,你就能在代码中优雅地从多个选项中快速跳转到正确的处理路径——这正是“switch from”的精髓:从一个表达式的值出发,切换到对应的执行逻辑。

    打开你的编辑器,从最简单的

    switch

    开始,逐渐尝试那些高级特性吧。

    开始,逐渐尝试那些高级特性吧。

    Switch的用法,从入门到精通-switch游戏下载社区