likes
comments
collection
share

很厌烦if else套娃代码?我教你用超简洁小技巧优化代码!!!

作者站长头像
站长
· 阅读数 15
 在日常的项目维护当中,听到最多的就是同事抱怨“shishan”代码。其中
 不乏出现很多if else套娃式的代码,真让人头皮发麻!!

很厌烦if else套娃代码?我教你用超简洁小技巧优化代码!!!

那么如果是代码嵌套太多会有哪些弊端呢?

  • 可读性:如果代码嵌套太多,那么很容易混乱思维逻辑更难以理解和维护,可读性差也会间接增加了维护成本
  • 可扩展性:由于else if 嵌套太多,后续的扩展更加难以入手和维护
  • 出错率高:由于要依赖嵌套逻辑来处理多个条件,因此代码容易出现逻辑错误和漏洞,从而导致程序行为不稳定或出现异常

接下来举个例子!!!!

很厌烦if else套娃代码?我教你用超简洁小技巧优化代码!!!

  • 案例一
function checkAge(age) {
  if (age < 0) {
    return "Age must be a positive number"
  }
  if (age < 18) {
    return "You are not yet an adult"
  }
  if (age < 60) {
    return "You are an adult"
  }
  return "You are a senior citizen"
}

这段代码可以怎么优化??

// 使用switch case
function checkAgeSwitch(age) {
    switch(true) {
       case age < 0: 
            return "Age must be a positive number"; 
        case age < 18: 
            return "You are not yet an adult"; 
        case age < 60: 
            return "You are an adult"; 
        default: return 'You are a senior citizen'; 
    }
}
checkAgeSwitch(12) // You are not yet an adult
  • 案例二
function checkWeek(week) {
  if (week == 0) {
    return "Today is Sunday"
  }
  if (week == 1) {
    return "Today is Monday"
  }
 if (week == 2) {
    return "Today is Tuesday"
  }
  if (week == 3) {
    return "Today is Wednesday"
  }
  if (week == 4) {
    return "Today is Thursday"
  }
  if (week == 5) {
    return "Today is Friday"
  }
  return "Saturday"
}

这段代码可以怎么优化??

// 方案一:使用数组的方式
function checkWeekArr(n) {
    const weekStr = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
    return "Today is " + weekStr[n]
}
// 方案二:使用对象的方式
function checkWeekObj(n) {
    const weekObj = {
        0: "Sunday",
        1: "Monday",
        2: "Tuesday",
        3: "Wednesday",
        4: "Thursday",
        5: "Friday",
        6: "Saturday"
    }
    return "Today is " + weekObj[n]
}
checkWeekObj(2) // Today is Tuesday
  • 案例三
function checkSex(str) {
    if(str == 'male') {
        return '性别为男性'
    }else {
        return '性别为女性'
    }
}

这段代码可以怎么优化??

// 三元运算符
function checkSex(str) { 
   return str == 'male' ? '性别为男性' : '性别为女性' 
}

拓展

当我们在 JavaScript 使用 if-else 长链式嵌套语句时,我们可以使用策略模式进行重构。策略模式是一种行为型设计模式,它允许你定义一系列的算法,将每个算法都封装起来,并且使它们都可以被互换。策略模式让算法独立于使用它的客户端而变化,也使得算法的变化不会影响到使用它的客户端。 以下是使用策略模式的 JavaScript 代码示例:

// 定义基础策略类 BaseStrategy
class BaseStrategy {
  constructor (tv) {
    this.tv = tv
  }
  turnOn () {}
  turnOff () {}
}
// 定义具体的策略类
class SamsungStrategy extends BaseStrategy {
  constructor (tv) {
    super(tv)
  }
  turnOn () {
    console.log('Turning on Samsung TV...')
    this.tv.power = true
  }
  turnOff () {
    console.log('Turning off Samsung TV...')
    this.tv.power = false
  }
}

class LGStrategy extends BaseStrategy {
  constructor (tv) {
    super(tv)
  }
  turnOn () {
    console.log('Turning on LG TV...')
    this.tv.power = true
  }
  turnOff () {
    console.log('Turning off LG TV...')
    this.tv.power = false
  }
}

// 定义 context 类
class Control {
  constructor (strategy) {
    this.strategy = strategy
  }

  setStrategy (strategy) {
    this.strategy = strategy
  }
  turnOn () {
    this.strategy.turnOn()
  }
  turnOff () {
    this.strategy.turnOff()
  }
}
// 使用 context 调用策略类
// 创建两个电视机
const samsungTV = { brand: 'Samsung', power: false }
const lgTV = { brand: 'LG', power: false }

// 初始化控制器,将控制器与 Samsung 电视机关联
const control = new Control(new SamsungStrategy(samsungTV))
control.turnOn()
// 切换策略类,将控制器与 LG 电视机关联,并关闭 Samsung 电视机
control.setStrategy(new LGStrategy(lgTV))
control.turnOff()

/**
在上面的例子中,我们定义了两个基础策略类 `BaseStrategy` 和两个具体的策略类 `SamsungStrategy` 和 `LGStrategy`。每个具体策略类都实现了 `turnOn` 和 `turnOff` 方法来执行其特定的逻辑。
我们还定义了一个 `Control` 类,其中包含了一个具体策略类的引用实例。通过 `setStrategy` 方法可以动态切换具体策略类,从而使得控制器可以根据不同种类的电视机,选择不同的处理方式。
最后,我们创建两个电视机,并使用 `Control` 类来控制电视机开关,验证控制器与不同的电视机品牌之间的关系和切换。
**/

以上就是对if else嵌套式代码优化方案,如果你有更好的方案请在评论区和大家一起分享!!!