关于优化多层if,else的方法

300 阅读1分钟

IMG_2600.png 首先,说一下为什么要对多层if,else进行优化:

  1. 多次使用 if...else 语句可能会导致代码嵌套过深,从而影响代码的可读性和可维护性。当 if...else 语句嵌套过多时,代码会变得难以理解和调试,容易出现错误。
  2. 使用多个 if...else 语句可能会导致代码重复,从而增加代码的维护成本。如果多个 if...else 语句中有相同的代码块,那么这些代码块需要被重复编写,这会增加代码的复杂度和维护成本。

优化方式:

  1. 早期返回方式:
function calculatePrice(quantity, price) {

  if (quantity< 0) {

    return null;

  }

  if (quantity < 10) {

    return quantity * price;

  }

  if (quantity < 50) {

    return quantity * price * 0.9;

  }

  return quantity * price * 0.8;

}

在上面的代码中,如果输入的数量小于0,直接返回null,每一层if,符合条件就会直接return出去,这样就避免了后面的if-else语句的嵌套。

  1. 对象字面量:
const discount = {

  0(quantity, price) => quantity * price,

  10(quantity, price) => quantity * price * 0.9,

  50(quantity, price) => quantity * price * 0.8,

};

function calculatePrice(quantity, price) {

  const key = Object.keys(discount).find((key) => quantity < key);

  return discount[key](quantity, price);

}

在上面的代码中,使用了对象字面量的方式,将不同的折扣函数存储在一个对象中。通过查找对象中第一个大于输入数量的键,来获取对应的折扣函数。

  1. 函数式编程方式:
function calculatePrice(quantity, price) {

  const discount = quantity < 10 ? 1 : quantity < 50 ? 0.9 : 0.8;

  return quantity * price * discount;

}

在上面的代码中,使用了函数式编程的方式,通过三元运算符来计算折扣,避免了大量的if-else语句。

  1. Map数据结构方式:
const discount = new Map([

  [0(quantity, price) => quantity * price],

  [10(quantity, price) => quantity * price * 0.9],

  [50(quantity, price) => quantity * price * 0.8],

]);

function calculatePrice(quantity, price) {

  const key = Array.from(discount.keys()).find((key) => quantity < key);

  return discount.get(key)(quantity, price);

}

在上面的代码中,使用了Map数据结构的方式,将不同的折扣函数存储在一个Map中。通过查找Map中第一个大于输入数量的键,来获取对应的折扣函数。

0154f55fd22ecf11013ee04d0619ef.jpg@2o.jpg 小结:

最近在做的项目中,需要进行大量的条件判断,一开始就是只会用if,else,else if,这种多层的判断,后来写完了后发现,项目中这种判断太多了,后期维护起来非常困难,所以就参考了一下各种解决方式,最后总结出上面四种方式,代码维护起来省略很多麻烦,定位问题也不用一层一层走一遍,就很方便🤭