《重构》第3章-代码的坏味道

488 阅读1分钟

过长的函数

  1. 分解条件表达式 范例: 假设要计算购买某样商品的总价(总价=数量*单价),而这个商品在夏季和冬季有不同的价格:
if(!aDAte.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd)) {
    charge = quantity * plan.summerRate;
} else {
    charge = qiantity * plan.regularRate + plan.regularServiceCharge;
}

把条件判断提炼到一个独立的函数中:

if(summer()) {
    charge = quantity * plan.summerRate;
} else {
    charge = qiantity * plan.regularRate + plan.regularServiceCharge;
}

function summer() {
    return !aDAte.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd);
}

然后提炼条件判断为真、假的分支:

if(summer()) {
    charge = summerCharge();
} else {
    charge = regularCharge();
}

function summer() {
    return !aDAte.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd);
}
function summerCharge() {
    return qiantity * plan.regularRate + plan.regularServiceCharge;
}
function regularCharge() {
    return qiantity * plan.regularRate + plan.regularServiceCharge;
}

你以为就结束了吗?最后用三元运算符重新安排条件语句:

charge = summer() ? summerCharge() : regularCharge();

function summer() {
    return !aDAte.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd);
}
function summerCharge() {
    return qiantity * plan.regularRate + plan.regularServiceCharge;
}
function regularCharge() {
    return qiantity * plan.regularRate + plan.regularServiceCharge;
}