返回

长函数重构之路:分解条件表达式

前端

缘起

在软件开发中,我们经常需要编写代码来检查不同的条件分支并根据不同的分支做不同的事情。这可能会导致一个相当长的函数,而大型函数本身就会使代码的可读性和可维护性降低。为了解决这个问题,我们可以使用“分解条件”重构方法来简化长函数,使其更容易理解和修改。

分解条件的步骤

  1. 提取条件表达式 :首先,我们需要从长函数中提取出所有条件表达式,并将它们存储在单独的变量中。

  2. 创建单独的函数 :接下来,我们需要为每个条件表达式创建单独的函数。这些函数应该只做一件事,即检查条件是否成立,并返回一个布尔值。

  3. 重构长函数 :最后,我们可以使用新创建的函数来重构长函数。我们将把条件表达式替换为对相应函数的调用。

分解条件的示例

考虑以下函数:

function calculateTotalCost(order) {
  if (order.type === "standard") {
    return order.price;
  } else if (order.type === "premium") {
    return order.price * 1.1;
  } else {
    return order.price * 1.2;
  }
}

这个函数根据订单类型计算订单的总成本。如果订单类型是“标准”,则总成本等于订单价格。如果订单类型是“高级”,则总成本等于订单价格乘以 1.1。如果订单类型是“豪华”,则总成本等于订单价格乘以 1.2。

我们可以使用分解条件重构方法来简化这个函数。首先,我们需要提取条件表达式:

const isStandard = order.type === "standard";
const isPremium = order.type === "premium";
const isLuxury = order.type === "luxury";

然后,我们需要为每个条件表达式创建单独的函数:

function isStandard(order) {
  return order.type === "standard";
}

function isPremium(order) {
  return order.type === "premium";
}

function isLuxury(order) {
  return order.type === "luxury";
}

最后,我们可以使用新创建的函数来重构长函数:

function calculateTotalCost(order) {
  if (isStandard(order)) {
    return order.price;
  } else if (isPremium(order)) {
    return order.price * 1.1;
  } else if (isLuxury(order)) {
    return order.price * 1.2;
  }
}

重构后的函数更加简洁易懂。条件表达式已经从长函数中提取出来,并且每个条件表达式都被存储在单独的变量中。这样,当我们需要修改条件表达式时,我们就只需要修改相应的变量,而不需要修改整个函数。

结论

分解条件重构方法是一种简单而有效的方法,可以用来简化长函数,提高代码的可读性和可维护性。通过分解条件表达式,我们可以让代码更易于理解和修改,同时还能减少代码冗余,提高代码的可测试性。