实际开发中,有时会遇到多个条件语句杂糅到一起的情况,这时候如果使用多个 if...else... 语句嵌套,会使得代码的冗余程度大大增加。针对这种情况,可以做一些针对性的优化,来增加代码的可维护性。

单个条件

  1. // before
  2. if (condition) {
  3. foo()
  4. }
  5. // after
  6. condition && foo()

if/else

if/else 通常可以使用两种优化策略:

  • 排非策略
  • 三元运算符

    排非策略

    排非即先对输入参数进行检查,若不符合条件的直接返回。
    1. if (!user || !password) return throw('用户名和密码不可为空🙅')
    2. // 后续逻辑处理

    三元运算符

    1. const allow = age >= 18 ? 'pass' : 'fail'
    2. condition ? success() : fail()

    单个 if 多个条件

    ```typescript // before function foo(type) { if (type === ‘jpg’ || type === ‘png’ || type === ‘gif’) { consoel.log(‘something’) } }

// after function bar(type) { const types = [‘jpg’, ‘png’, ‘gif’] if (types.includes(type)) { console.log(‘something’) } }

  1. <a name="O469T"></a>
  2. ## 多个 else if 分支
  3. <a name="weM1Y"></a>
  4. ### switch
  5. ```typescript
  6. switch(val) {
  7. case 'A':
  8. handleA()
  9. break
  10. case 'B':
  11. handleB()
  12. break
  13. // ...
  14. }

k/v 优化

  1. const enums = {
  2. 'A': handleA,
  3. 'B': handleB
  4. // ...
  5. }
  6. function action(val) {
  7. const handleType = enums[val]
  8. handleType()
  9. }

map 优化

  1. const enums = new Map([
  2. ['A', handleA],
  3. ['B', handleB]
  4. // ...
  5. ])
  6. function action(val) {
  7. const handleType = enums.get(val)
  8. handleType()
  9. }
  1. // 组合使用
  2. let enums = new Map([
  3. ['kline_A', handleKlineA],
  4. ['kline_B', handleKlineB],
  5. ['kline_C', handleKlineC],
  6. ['kline_D', handleKlineD],
  7. ['kline_E', handleKlineE],
  8. ['depth_A', handleDepthA],
  9. ['depth_B', handleDepthB],
  10. ['depth_C', handleDepthC],
  11. ])
  12. function action(mode, type){
  13. let key = `${mode}_${type}`
  14. let handleType = enums.get(key)
  15. handleType()
  16. }