📜  如果条件如何正确拆分 (1)

📅  最后修改于: 2023-12-03 15:38:59.770000             🧑  作者: Mango

如果条件语句如何正确拆分

在编写程序时,条件语句是非常常见的语句。如果条件语句分支太多或者太复杂,就容易使程序难以维护和阅读。因此,正确拆分条件语句是非常重要的。

拆分条件语句的原则

拆分条件语句的原则通常有以下几个:

  1. 每个分支的处理逻辑尽量单一,避免出现嵌套的条件语句。
  2. 降低分支嵌套的层数,也就是避免出现深度嵌套的条件语句。
  3. 尽量使用组合条件语句,而不是嵌套的条件语句。

以下提供一些拆分条件语句的方法:

1. 使用switch-case语句

对于一些固定的取值,我们可以使用switch-case语句来处理。

switch(dayOfWeek) {
  case 0:
    console.log("Sunday");
    break;
  case 1:
    console.log("Monday");
    break;
  case 2:
    console.log("Tuesday");
    break;
  case 3:
    console.log("Wednesday");
    break;
  case 4:
    console.log("Thursday");
    break;
  case 5:
    console.log("Friday");
    break;
  case 6:
    console.log("Saturday");
    break;
  default:
    console.log("Invalid day");
}
2. 使用函数

如果条件语句的分支比较多,我们可以考虑使用函数来处理分支,使得代码结构更清晰。

function getPrice(type, size) {
  if (type === "A") {
    if (size === "S") {
      return 10;
    } else if (size === "M") {
      return 20;
    } else if (size === "L") {
      return 30;
    }
  } else if (type === "B") {
    if (size === "S") {
      return 5;
    } else if (size === "M") {
      return 10;
    } else if (size === "L") {
      return 15;
    }
  }
}

可以拆分成以下两个函数:

function getPriceTypeA(size) {
  if (size === "S") {
    return 10;
  } else if (size === "M") {
    return 20;
  } else if (size === "L") {
    return 30;
  }
}

function getPriceTypeB(size) {
  if (size === "S") {
    return 5;
  } else if (size === "M") {
    return 10;
  } else if (size === "L") {
    return 15;
  }
}

function getPrice(type, size) {
  if (type === "A") {
    return getPriceTypeA(size);
  } else if (type === "B") {
    return getPriceTypeB(size);
  }
}
3. 使用策略模式

另一种方法是使用策略模式(Strategy Pattern),该模式可以将条件语句的分支封装成单独的策略类,从而使得程序更好维护和拓展。

class SmallSizePriceStrategy {
  getPrice() {
    return 10;
  }
}

class MediumSizePriceStrategy {
  getPrice() {
    return 20;
  }
}

class LargeSizePriceStrategy {
  getPrice() {
    return 30;
  }
}

class TypeAPriceStrategy {
  getPrice(size) {
    if (size === "S") {
      return new SmallSizePriceStrategy().getPrice();
    } else if (size === "M") {
      return new MediumSizePriceStrategy().getPrice();
    } else if (size === "L") {
      return new LargeSizePriceStrategy().getPrice();
    }
  }
}

class TypeBPriceStrategy {
  getPrice(size) {
    if (size === "S") {
      return 5;
    } else if (size === "M") {
      return 10;
    } else if (size === "L") {
      return 15;
    }
  }
}

class PriceCalculator {
  constructor(strategy) {
    this.strategy = strategy;
  }
  calculatePrice(type, size) {
    if (type === "A") {
      return this.strategy.getPrice(size);
    } else if (type === "B") {
      return new TypeBPriceStrategy().getPrice(size);
    }
  }
}

这样,我们可以通过改变策略来改变程序的行为。

总结

在编写程序时,我们应该尝试按照上述原则来拆分条件语句,从而使得程序更加吸引人和可读性。