周分享

if else 嵌套优化——周分享

2020-02-20  本文已影响0人  橙汁坤

if else 嵌套优化

function Demo (a, b, c) {
  if (func1(a, b, c)) {
    action ((a, b, c)=>{
    // do something...  
    }) 
   } else if (func2(a, b, c)) {
    // do something...
     action ((a, b, c)=>{
      // do something...  
      }) 
    }else if (func3(a, b, c)) {
      action ((a, b, c)=>{
      // do something...  
      })  
   } 
}
func1(a,b,c){ do something}
func2(a,b,c){ do something}
func3(a,b,c){ do something}

各个分支控制下的代码如下:


image.png

优化后

const RuleMap = [
 {
     rule: func1(a, b, c) { do something  //判断是否匹配//   },
    action :function (a, b, c) {do something...}
  },
  {
     rule: func2(a, b, c) { do something    },
    action :function (a, b, c) {do something...}
  },
  {
     rule: func3(a, b, c) { do something    },
    action :function (a, b, c) {do something...}
  }
]

function Control (a, b, c) {
  for (let i = 0; i < RuleMap.length; i++) {
    if (RuleMap[i].rule(a, b, c)) {
      return RuleMap[i].action(a, b, c)
    }
  }
}

RuleMap是所有判断规则和其执行方法的合集,RuleMap 中的每一项都具有 rule(规则) 与 action (方法)属性。这时可以将原有函数的 else if 改写对职责链数组的遍历。这时每个rule一旦匹配,函数就会直接返回,通过此方法可以实现对单体复杂 else if 逻辑的拆分。


image.png
上一篇下一篇

猜你喜欢

热点阅读