代码优化,使代码优雅

93 阅读1分钟

1.代码优化 --- if多分支

实习过程有一个bug让我处理,我使用if多分支处理的,功能实现了,但是看着代码很臃肿,感觉我写的就是个屎山,当时大概思路是这样的(有简化)。

function fn(a){
    if(a === 'A'){
        return 'aa'
    }
    else if(a === 'B'){
        return 'bb'
    }
    else if(c === 'C'){
        return 'cc'
    }
    else if(d == 'D'){
        return 'dd'
    }
    else{
        return 'ee'
    }
}
console.log(fn('A'))

如果后续还要添加判断就要不断的添加else if分支,很麻烦。

优化后:

情况一:不同分支里的操作相同,只有参数不同

let map = {
    'A': 'aa',
    'B': 'bb',
    'C': 'cc',
    'd': 'dd',
    'other': 'ee'
}
function fn(a){
   if(map[a]){
    return map[a]
   }
   return map['other']
}
console.log(fn('B'));

如果后续还要添加判断可以在对象map中添加属性,更方便。

情况二:不同分支里的操作不同。

let map = {
    'A': function () { console.log('操作一'); },
    'B': function () { console.log('操作二'); },
    'C': function () { console.log('操作三'); },
    'd': function () { console.log('操作四'); },
    'other': function () { console.log('操作五'); },
}
function fn(a) {
    if (map[a]) {
        map[a]()
        return
    }
    map['other']()
    return
}
fn('B')                     // 操作二

如果后续还要添加判断可以在对象map中添加属性和对应的方法,比较清晰。

代码优化 --- 单if分支

今天看第二个项目的代码,有一个句代码简写是我没想到的。

(判断一) && 执行语句

太优秀了,理解起来并不难,就是简单的利用 && 逻辑判断的短路现象。如果(判断一)的返回值为false,那么就不执行后面的语句,反之,则执行判断语句。

代码等价于:if(判断一) 执行语句

其实没有简单很多,但是让人眼前一亮,条件判断不用if语句用&&,别出心裁,独具匠心。