【问题标题】:Why should I learn "switch case" when "if else" already exists [duplicate]当“if else”已经存在时,我为什么要学习“switch case”[重复]
【发布时间】:2012-12-19 03:22:26
【问题描述】:

可能重复:
Advantage of switch over if-else statement
Why Switch/Case and not If/Else If?

我目前正在学校学习“switch case”,并且想知道当“if else”已经存在时学习它的意义何在。 “if else”基本上是另一种做“switch case”的方式。

如果我错了,请纠正我。

【问题讨论】:

  • 他们不一样。您需要重新阅读它们的工作原理。
  • 尝试用if then else 实现duffs device
  • 即使它们是相同的(在功能层面上),了解做同一件事的不同方式也很重要......这样你就知道哪一种最适合你的情况目前在。
  • 为避免投反对票和封闭答案,请尝试“更具建设性”的措辞,例如:“使用 switch-case 而不是 if-else 的原因是什么?”并确保标题中也提出了这样一个“中立的客观问题”。此外,通过校对表现出更多的努力可以获得更容易接受的反应。

标签: java c++ c coding-style


【解决方案1】:

听到它有点怀旧。他们俩实际上“看起来”一样。但是在代码执行的时候就有点不一样了。

首先,“switch-case”是关于仅比较值的。但是 'if-else' 可以处理布尔表达式(这将支持更复杂的子句)

如果您在找到您实际搜索的内容后使用通用的“if-else”,该过程仍将运行,直到它完成处理最后一个 if(但实际上它可以使用跳转技术具有类似的机制'开关盒'。) 如果您使用“switch-case”,则不会发生这种情况,因为一旦找到您要搜索的值,它将中断并且不会继续到下一个案例。此外,'switch-case' 比 if else 处理得更快,因为它只比较定义的值(而不是表达式)。而且'switch-case'也有很好的格式化结构(简单、紧凑、可读、干净)。

【讨论】:

    【解决方案2】:

    您拥有的工具越多越好。最好的陈述为什么你应该知道这两个......但是一个更详细的例子 -

    switch 语句作用于结构的单一类型变量:

    variable == value
    

    因此,例如,在 C 语言中,如果您试图将某些内容与几个不同的字符串进行比较以做出决定,那么您无法通过 switch 来做到这一点。在这种情况下,您需要了解 if/else 构造。

    但是,如果您有大量的顺序检查:

    var == 1  or
    var == 2  or
    var == 3  etc
    

    编译器可能会获取您的 switch 语句并将其转换为跳转表,这最终会比 if/else 列表的大量比较更快。

    【讨论】:

      【解决方案3】:

      您应该学习 switch 构造,因为它是 C 语言提供的有用工具。

      if-else 块相同。

      在您问题的 cmets 部分,有指向现有 StackOverflow 答案的链接解释了它们之间的区别。

      每种构造都有其优点和缺点,随着时间的推移,您将了解何时选择一个而不是另一个合适。

      【讨论】:

        【解决方案4】:

        你应该两个都学。虽然技术上可以使用switch 实现任何if / else 序列,反之亦然,但在大多数情况下这样做是非常糟糕的做法。 p>

        因此,您需要学习这两种结构,了解它们的优缺点,并学会根据自己的判断来判断何时适合使用每种结构。

        C 和 C++ 和 Java(以及 C# 和 Pascal 以及许多其他语言)所有都支持 switch 语句这一事实应该告诉你 一些关于它的有用性.. .

        【讨论】:

          【解决方案5】:

          switch-caseif-else 构造之间的区别:

          1. Switch-case 仅打开值,不计算布尔表达式。
          2. 如果您在 case 块后不使用 break,则 Switch-case 会自动执行下面的下一个 case。此功能有时对编写复杂代码很有用,例如“电话拨号计划”
          3. 当比较的数量很大时,Switch-case 比 if-else 更优雅,例如显示“菜单”等。

          【讨论】:

            猜你喜欢
            • 2017-10-25
            • 1970-01-01
            • 2013-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-20
            相关资源
            最近更新 更多