【问题标题】:What is the difference between IF-ELSE and SWITCH?IF-ELSE 和 SWITCH 有什么区别?
【发布时间】:2009-03-25 08:16:44
【问题描述】:

谁能给我解释一下?

【问题讨论】:

  • 只是一个指针 - 如果您不花时间正确表达问题,您将不会得到很多有用的回答。
  • 没关系 :) 已经完成了。
  • 在 SO 上已经有一个关于此的问题:Switch vs if-else **Edit**
    正如“lc”在对此答案的评论中所述,上述问题不是重复的,但它仍然可以让您对工作原理以及在发生这种特定情况时使用什么有一个很好的了解。
  • 虽然不是完全相同的副本。您链接到的那个是专门询问失败并在 if-else 语句中使用 OR。

标签: language-agnostic switch-statement if-statement


【解决方案1】:

它们非常相似,但每个都有一些特殊功能。

切换

  • switch 通常比许多嵌套的 if else 更紧凑,因此更具可读性
  • 如果您在两个 switch case 之间省略了break,在许多类 C 语言中,您可能会遇到下一个 case。使用if else,您需要goto(这对您的读者来说不是很好......如果语言完全支持goto)。
  • 在大多数语言中,switch 仅接受原始类型作为键和常量作为案例。这意味着编译器可以使用非常快的跳转表对其进行优化。
  • 目前还不清楚如何正确格式化switch。从语义上讲,这些案例是跳转目标(如goto 的标签),应该向左对齐。当你有花括号时,情况会变得更糟:

    case XXX: {
    } break;
    

    或者大括号应该单独成行?右大括号应该放在break 后面吗?那会有多难读?等等

  • 在许多语言中,switch 仅接受某些数据类型。

if-else

  • if 允许在条件中使用复杂的表达式,而 switch 需要一个常量
  • 您不会不小心忘记ifs 之间的break,但您可能会忘记else(尤其是在剪切粘贴时)
  • 它接受所有数据类型。

【讨论】:

  • 请注意,case 失败的行为是特定于语言的,c 很乐意允许你这样做,但 c# 对从一个 case 语句到另一个 case 语句设置了一些限制。
  • 主要区别之一是他们检查条件的方式 - 使用if-else,您只能检查是否相等,而使用switch,您可以做更多的事情..
【解决方案2】:

主要区别在于switch立即发送到相关case,通常通过索引跳转,而不是必须评估if-else 中所需的所有条件链,这意味着到达链末端的代码比到达链开头的代码要慢。

这反过来又对if-else 链所没有的switch 语句施加了一些限制:它不能处理所有数据类型,并且所有case 值都必须是常量。

【讨论】:

    【解决方案3】:

    IF else - IT 用于做出决定

    Switch 语句 - 用于根据案例值列表测试给定变量的值。

    【讨论】:

    • 两者都用于测试值,都用于决策。不测试价值就无法做出决定,除非您要做出决定,否则测试价值毫无意义。
    【解决方案4】:

    if-else 和 switch 的区别

    1. if 语句内部的表达式决定是执行 if 块内部还是 else 块下的语句。另一方面,switch 语句中的表达式决定执行哪种情况。

    2. If-esle 语句检查是否相等以及逻辑表达式。另一方面,switch 只检查是否相等。

    3. if 语句计算整数、字符、指针或浮点类型或布尔类型。另一方面,switch 语句只计算字符或整数数据类型。

    4. 执行顺序类似于 if 块下的语句将执行或 else 块语句下的语句将执行。另一方面,switch语句中的表达式决定执行哪个case,如果你不在每个case之后应用break语句,它将一直执行到switch语句结束。

    5. 如果 if 中的表达式为假,则执行 else 块中的语句。如果 switch 语句中的表达式结果为 false,则执行默认语句。

    6. 很难编辑 if-else 语句,因为跟踪需要更正的位置很繁琐。另一方面,切换语句很容易编辑,因为它们很容易追踪。

    一言以蔽之 switch 的作用比 if else 语句快一点!!!

    【讨论】:

    • “如果 switch 语句中的表达式结果为假,则执行默认语句”:情况并非如此。考虑boolean b = false; switch (b) { case true: break; case false: break; }。没有default 那里。
    • 和(1)是有区别的,没有区别。 if 决定是执行 if 语句还是 else 语句。 switch 决定执行哪种情况。这里没有本质区别。
    【解决方案5】:

    Switch 和 if-else 语句的区别如下:

    这是 if-else 阶梯的一般语法:

    if (condition1) { //Body of if }
        else if (condition2) { //Body of if }
        else if (condition3) { //Body of if }
    else { //default if all conditions return false }
    

    这是 switch 的一般语法:

    switch ( variable )
    {
     case <variable value1>: //Do Something
                                                 break;
     case <variable value2>://Do Something
                                                 break;
     default: //Do Something
                    break;
    }
    

    if-else 阶梯属于严格条件检查类型, 而 switch 是跳转值捕获类型。

    切换if-else阶梯的优势:

    • switch 语句的运行速度比等效的 if-else 阶梯要快得多。这是因为编译器在编译过程中为一个开关生成了一个跳转表。因此,在执行过程中,它不会检查满足哪种情况,而只是决定必须执行哪种情况。
    • 与 if-else 语句相比,它更具可读性。

    【讨论】:

      【解决方案6】:

      明显的区别:

      • if...else 语句检查括号中的 条件 的计算结果是 true 还是 false
      • switch 语句检查括号中的 valuecase 关键字的 value 是否相等,计算结果为 true

      示例

      var a  = 'hello'
      

      示例 - 如果...否则

      if(a == 'hello') {
        print('right!')
      } else if (a == 'hi')
        print('left!')
      } else {
        print('wrong!')
      }
      

      示例 - 开关

      switch(a) {
        case 'hello': // a == 'hello'
          print('right!')
          break // You should add this
        case 'hi': // a == 'hi'
          print('left!')
          break
        default: // this executes if no equality was met in the values above.
          print('wrong!')
      }
      
      // If you are not sure of either of the parenthesis value or the
      // case value or you want to make more complex conditioning, you can use `true`:
      
      var age = 18:
      switch(true) {
        case age < "18": // 18 < 18 == false
          print("under age!");
          break;
        case age == 18: // 18 == 18 == true
          print("right age!");
          break;
        default:
          print("18+!");
      }
      

      【讨论】:

        【解决方案7】:

        我认为主要区别在于,在 if-else 块中我们可以测试条件。但在 switch 中并不完全相同

        【讨论】:

          猜你喜欢
          • 2011-11-09
          • 2011-03-11
          • 1970-01-01
          • 2021-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多