《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有8种。本文介绍:
合并重复的条件片段 consolidate duplicate conditional fragments
- 名称:合并重复的条件片段 consolidate duplicate conditional fragments
- 概要:在条件表达式的每个分支上有着相同的一段代码,将这段重复代码搬移到条件表达式以外
- 动机: 清晰的表明哪些东西随条件的变化而变化,哪些东西保持不变
- 做法:
- 鉴别出“执行方式不随条件变化而变化”的代码
- 如果这些共通代码位于条件表达式起始处,就将它移到条件表达式之前
- 如果这些共通代码位于条件表达式尾端,就将它移到条件表达式之后
- 如果这些共同代码位于条件表达式中段,就需要观察共通代码之前或之后的代码是否改变了什么东西。如果的确有所改变,应该首先将共通代码向前或向后移动,移至条件表达式的起始处或尾端,再以前面所说的办法来处理
- 如果共通代码不止一条语句,首先使用extract method 将共通代码提炼到一个独立函数中,再以前面所说的办法来处理
- 代码演示
修改之前的代码:
double SimplifyConditional::calcTotal()
{
if (isSpecialDeal())
{
m_total = m_price * 0.95;
Send();
}
else
{
m_total = m_price * 0.98;
Send();
}
return m_total;
}
修改之后的代码:
double SimplifyConditional::calcTotal()
{
if (isSpecialDeal())
{
m_total = m_price * 0.95;
}
else
{
m_total = m_price * 0.98;
}
Send();
return m_total;
}