《重构:改善既有代码的设计》 简化条件表达式  之 3 合并重复的条件片段 consolidate duplicate conditional fragments

《重构:改善既有代码的设计》中提到过很多重构方法,关于简化条件表达式的方法有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;
}
上一篇:INSERT⋯ACCEPTING_DUPLICATE_KEYS


下一篇:220. Contains Duplicate III