浅析switch和if(开发中这两者的优缺点;分析出优缺点在使用就能更确定自己 ...

农民  论坛元老 | 2023-6-15 17:26:08 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1021|帖子 1021|积分 3063

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分析 Switch 相较于 if 的优点 

1、switch 执行效率  高于  if 的执行效率

  分析:
    switch是在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执行就可以了,
    if处理起来首先要把a的值放到CPU的寄存器中,然后要把比较的值放到CPU的另一个寄存器中,然后做减法,然后根据计算结果跳转到子函数去执行,这样一来就要多出3步的操作了,如果逻辑判断多的话,那么将会比switch多处许多倍的操作,尽管寄存器操作的速度很快,但是效率方面还是不如switch ;
 2、代码清晰简单易读;

  如下例子很清晰看到 什么条件下可以执行哪个子函数
分析 Switch 相较于 if 的缺点

1、阅读一下代码快速寻找到问题
  1. let a = 0;
  2. switch(a){
  3.   case 0:
  4.     console.log("let is 0 ")
  5.     break;
  6.  case 1:
  7.     console.log("let is 1 ")
  8.  case 2:
  9.     console.log("let is 2 ")
  10. }
复制代码
缺点一、语法正确,逻辑错误
在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。
 缺点二、语法比较死板

switch尽管对于break很宽容,但是对判断条件很严苛,case后面只能跟常量
缺点三、需要子函数来处理分支

这个缺点跟缺点一有关,为了防止漏写break
 
为什么要使用break来做一个判断结束呢?

    最初代码中是没有子函数的概念的,那时候都是用goto随意跳转的,你想去第10行代码,很简单goto 10就可以了。这种编程思维在C的早期阶段还是一直受到影响的,因此早期的C也没有子函数,都是一堆逻辑处理混乱在一起,goto满天飞,所以那时候你没有一个最强大脑是写不了程序的。那为了告诉程序我这里条件判断处理结束,就添加了break作为终止符号。
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表