《重构:改善既有代码的设计》 简化条件表达式  之 1 分解条件表达式 decompose conditional

《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有8种。本文介绍:
分解条件表达式 decompose conditional

  • 名称:分解条件表达式 decompose conditional
  • 概要:有一个复杂的条件(if-then-else)语句,从if, then,else三个段落中分别提炼出独立函数
  • 动机: 大型函数自身会使代码的可读性下降
  • 做法:
    • 将if段落提炼出来,构成一个独立函数
    • 将then段落和else段落都提炼出来,各自构成一个独立函数
  • 代码演示
    • 假设要计算某样商品的总价(总价 = 数量 X 单价),而这个商品在冬季和夏季的单价使不同的

修改之前的代码:

///.h
#ifndef SIMPLIFYCONDITIONAL_H
#define SIMPLIFYCONDITIONAL_H


class SimplifyConditional
{
public:
    SimplifyConditional();
    double CalcCharge();

private:
    int m_date;
    double m_charge;
    int m_quantity;
    double m_winnerRate;
    double m_summerRate;
    double m_winnerSeviceCharge;
};

#endif // SIMPLIFYCONDITIONAL_H

///.cpp
#include "SimplifyConditional.h"
#define SUMMER_START 0401
#define SUMMER_END 1031

SimplifyConditional::SimplifyConditional()
{

}

double SimplifyConditional::CalcCharge()
{
 if (m_date < SUMMER_START || m_date > SUMMER_END)
 {
     m_charge = m_quantity * m_winnerRate + m_winnerSeviceCharge;
 }
 else
 {
     m_charge = m_quantity * m_summerRate;
 }
 return  m_charge;
}

修改之后的代码:

///.h
#ifndef SIMPLIFYCONDITIONAL_H
#define SIMPLIFYCONDITIONAL_H


class SimplifyConditional
{
public:
    SimplifyConditional();
    double CalcCharge();
    bool isNotSummer();
    double winnerCharge();
    double summerCharge();

private:
    int m_date;
    double m_charge;
    int m_quantity;
    double m_winnerRate;
    double m_summerRate;
    double m_winnerSeviceCharge;
};

#endif // SIMPLIFYCONDITIONAL_H

///.cpp
#include "SimplifyConditional.h"
#define SUMMER_START 0401
#define SUMMER_END 1031

SimplifyConditional::SimplifyConditional()
{
    
}

double SimplifyConditional::CalcCharge()
{
    if (isNotSummer())
    {
        m_charge = winnerCharge();
    }
    else
    {
        m_charge = summerCharge();
    }
    return  m_charge;
}

bool SimplifyConditional::isNotSummer()
{
    return (m_date < SUMMER_START || m_date > SUMMER_END);
}

double SimplifyConditional::winnerCharge()
{
    return m_quantity * m_winnerRate + m_winnerSeviceCharge;
}

double SimplifyConditional::summerCharge()
{
    return m_quantity * m_summerRate;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

giantmfc123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值