switch case和if else比较

switch case和if else比较switchcase和ifelse常常被拿来比较?那是因为他们两个都可以实现同样的功能。这时候我们就会想什么时候用哪个更好呢?可以从下面几个方面来做一下比较:1.灵活性2.效率https://blog.csdn.net/wyk19950704/article/details/50983903…

大家好,欢迎来到IT知识分享网。

switch case和if else常常被拿来比较,那是因为他们两个都可以实现同样的功能。这时候我们就会想什么时候用哪个更好呢?

可以从下面几个方面来做一下比较:
1.灵活性
首先看下面一个简单的例子:

//在a和b都是正数的情况下判断a+b是否大于c
var a = 1,
  b = 2,
  c = 2;

//方式1
if (a > 0 && b > 0) { 
   
  if (a + b > c) { 
   
    console.log("a+b大于c");
  } else { 
   
    console.log("a+b不大于c");
  }
} else { 
   
  console.log("a和b不都是正数");
}

//方式2
switch (a > 0 && b > 0) { 
   
  case true:
    switch (a + b > c) { 
   
      case true:
        console.log("a+b大于c");
        break;
      case false:
        console.log("a+b不大于c");
        break;
    }
    break;
  case false:
    console.log("a和b不都是正数");
    break;
}

从上面这么一个简单的例子可以看出来,switch case和if else虽然都可以实现同样的功能,但是对于逻辑判断表达式来说if else更加灵活,switch需要用更多的分支来实现和if else一样的效果,在逻辑判断表达式更复杂的时候表现的越明显。而对于switch case来说常量的匹配会更加有优势,特别注意switch case的关联操作在一些情况下也非常有用,例子可以参考switch MDN文档

除此之外还有2点需要注意:
① 在许多语言中,switch的参数只能支持某些数据类型。而if几乎可以支持所有的数据类型。
② if语句没有else不会影响后续代码的执行,但是switch语句必须注意break的用法,具体可以参考这篇文章

2.效率
借用2个图1来说明下两个语句的执行过程:
if else
图1: if else执行流程图

switch case
图2: switch case执行流程图

从上面两个图可以明显的看出来,对于if else来说要遍历每一个条件直到找到符合条件的case,对于不同case其实执行时间是不一样的。进入第一个case需要判断1次,符合第二个case需要判断2次,以此类推……

switch case本质是通过在汇编的时候生成跳转表来指示case的地址,通常编译器都会对跳转表进行优化2,所以它所有case都可以通过少量判断就跳转到对应符合条件的case,对于每一个case的执行时间基本是相同的。

没有经过特定条件的巨大量的测试,没法给出具体有几个分支的时候选择哪一种方式速度更快,但是以下几点值得我们注意:
① 在分支比较多的情况下优先考虑switch case,不仅考虑到效率,也应该综合代码可读性,可维护性等。
② 选择使用哪个表达式之前应该评估每个条件出现的可能性,如果if else的前面两三个条件就可以覆盖到绝大部分情况,其实if else的效率并不会比switch case低。
③ 这两种表达式的不同在效率上对整体代码的执行时间影响很小,应该把代码的可读性,可维护性等考虑因素放在效率之前。

3.可读性和可维护性
参考阐述灵活性中的举例,当判断条件为逻辑表达式且条件较少的时候,使用if else看起来比switch case简洁而且维护起来也更容易。
但是当条件数超过三个且都是常量的时候,看下面这个简单的例子:

//方式1
switch (color) { 
   
  case "red":
    console.log("red");
    break;
  case "yellow":
    console.log("yellow");
  case "blue":
    console.log("blue");
  default:
    console.log("unknown color");
}

//方式2
if (color === "red") { 
   
  console.log("red");
} else if (color === "yellow") { 
   
  console.log("yellow");
} else if (color = "blue") { 
   
  console.log("blue");
} else { 
   
  console.log("unknown color");
}

用switch case看起来就非常清晰,而且即使你再加几个条件看起来代码也不会显得冗余,维护性和可读性都比if else更好。

综上,选择什么时候使用switch case或if else不能只看一种因素,需要综合考虑到各个方面。

关联操作


  1. https://www.codewithc.com/difference-between-switch-case-and-else-if-ladder/ ↩︎

  2. http://www.voidcn.com/article/p-yxtpvpua-cs.html ↩︎

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15305.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信