IF-ELSE和SWITCH有什么区别?

时间:2009-03-25 08:16:45

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

有人可以向我解释一下吗?

7 个答案:

答案 0 :(得分:35)

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

<强>开关

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

    case XXX: {
    } break;
    

    或者大括号是否应该成为他们自己的行?闭合支撑是否应该落后于break?这有多难以理解?等

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

<强>的if-else

  • if允许条件中的复杂表达式,而switch需要常量
  • 你不能不小心忘记break之间的if,但你可以忘记else(尤其是在'cut'n'paste期间)
  • 它接受所有数据类型。

答案 1 :(得分:2)

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

这反过来对switch链没有的if-else声明施加了一些限制:它无法处理所有数据类型,而且case全部都是<img class="second" src="http://s32.postimg.org/4vp56ei11/workout_left.jpg" id="under"> .second { position: absolute; top: 0; z-index: 2; left: 0; width: 100%; } 值必须保持不变。

答案 2 :(得分:2)

if-else和switch

之间的差异
  1. if语句中的表达式决定是否在block或else块下执行语句。另一方面,switch语句中的表达式决定执行哪种情况。

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

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

  4. 执行顺序就像if块执行时的语句或else块语句下的语句将执行。另一方面,switch语句中的表达式决定执行哪种情况,如果在每种情况之后不应用break语句,它将执行直到switch语句结束。

  5. 如果内部表达式如果变为false,则执行else块内的语句。如果switch语句中的表达式变为false,则执行default语句。

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

  7. 我们可以说一句话 switch比else else语句快一点!!!

答案 3 :(得分:1)

如果不这样做 - IT用于做出决定

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

答案 4 :(得分:1)

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语句相比,它更具可读性。

答案 5 :(得分:0)

明显的区别:

  • if...else 语句检查括号中的条件的计算结果是 true 还是 false
  • switch 语句检查括号中的 valuecase 关键字的 value 的相等性是否等于 {{1 }}。

示例

true

示例 - if...else

var a  = 'hello'

示例 - 开关

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

答案 6 :(得分:-2)

我认为主要区别在于if-else块我们可以测试条件。但是在切换中不会完全相同的方式