if-else 和 switch 语句优化

1、if-else 对比 switch

  条件数量越大,越频向于使用 switch 而不是 if-else。

  条件较少时 if-else 更易读,相反 switch 更易读

2、优化 if-else

  i、最小化到达正确分支前所有需要的判单条件数量,最简单的方法确保最可能出现的条件放在首位。

    例如:

      if(value<5){

        //代码处理

      }else if(value >5 && value<10){

      }else{

      }

    if-else 中的条件语句应该总是按照从最大概率到最小概率的顺序排列,以确保运行速度最快。

  ii、将if-else 组成一系列嵌套的if-else 语句。

    例如如下代码:

if (vlaue === 0) {
  return return0;
} else if (value === 1) {
  return return1;
} else if (value === 2) {
  return return2;
} else if (value === 3) {
  return return3;
} else if (value === 4) {
  return return4;
} else if (value === 5) {
  return return5;
} else if (value === 6) {
  return return6;
} else if (value === 7) {
  return return7;
} else if (value === 8) {
  return return8;
} else if (value === 9) {
  return return9;
} else {
  return return10;
}

    以上条件语句最多要判断10次。假设 value 的值在 0 到 10 之间均匀分布,会增加平均运行时间。

  优化之后的代码:

if (value < 6) {
  if (value < 3) {
    if (vlaue === 0) {
      return return0;
    } else if (value === 1) {
      return return1;
    } else {
      return return2;
    }
  } else {
    if (value === 3) {
      return return3;
    } else if (value === 4) {
      return return4;
    } else {
      return return5;
    }
  }
} else {
    if(value<8){
        if (value === 6) {
            return return6;
          } else {
            return return7;
          }
    }else{
        if (value === 8) {
            return return8;
          } else if(value===9) {
            return return9;
          }else{
            return return10;
          }
    }
}

    优化之后的代码使用 二分法把值域分成一系列的区间,然后逐步缩小范围。代码运行的平均时间大约是前面列子的一半。

  iii、当有大量离散值时,if-else 和switch 比使用查表慢很多。

    例如:    

switch (value) {
  case 0:
    return return0;
  case 1:
    return return1;
  case 2:
    return return3;
  case 3:
    return return3;
  case 4:
    return return4;
  case 5:
    return return5;
  case 6:
    return return6;
  case 7:
    return return7;
  case 8:
    return return8;
  case 9:
    return return9;
  default:
    return return10;
}

  优化如下:

var results=[return0,return1,return2,return3,return4,return5,return6,return7,return8,return9,return10]
return results[value]

 

  

posted @ 2021-01-24 13:32  从此世间无星辰  阅读(387)  评论(0)    收藏  举报