zoukankan      html  css  js  c++  java
  • 重构手法(三)之简化条件表达式

    1、Decompose Conditional(分解条件表达式)

    重构前:

    if(date.before(SUMMER_START) || date.after(SUMMER_END))
        charge = quantity * _winterRate + _winterServiceCharge;
    else
        charge = quantity * _summerRate;

    重构后:

    if(notSummer(date))
        charge = winterCharge(quantity);
    else
        charge = summerCharge(quantity);

    2、Consolidate Conditional Expression(合并条件表达式)
    重构前:

    double disabilityAmount(){
        if(_seniority < 2)    return 0;
        if(_monthsDisabled > 12)    return 0;
        if(_isPartTime)    return 0;
        //computer the disability amount          
    }

    重构后:

    double disabilityAmount(){
        if(isNotEligableForDisablity())    return 0;
        //computer the disablity amount
    }

    3、Consolidate Duplicate Conditional Fragments(合并重复的条件片段)

    重构前:

    if(isSpecialDeal()){
        total = price * 0.95;
        send();
    }
    else{
        total = price * 0.98;
        send();
    }

    重构后:

    if(isSpecialDeal()){
        total = price * 0.95;
    }
    else{
        total = price * 0.98;
    }
    send();

    4、Remove Control Flag(移除控制标记)

      在一系列布尔表达式中,某个变量带有“控制标记”(control flag)的作用。以break语句或return语句取代控制标记。

    5、Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)

    重构前:

    double getPayAmount(){
        double result;
        if(_isDead)    result = deadAmount();
        else{
            if(_isSeparated)    result = separatedAmount();
            else{
                if(_isRetired)    result = retiredAmount();
                else    result = normalPayAmount();
            }
        }
        return result;
    }

    重构后:

    double getPayAmount(){
        if(_isDead)    return deadAmount();
        if(_isSeparated)    return separatedAmount();
        if(_isRetired)    return retiredAmount();
        return normalPayAmount();  
    }

    6、Replace Conditional with Polymorphism(以多态取代条件表达式)

    7、Introduce Null Object(引入Null对象)

    8、Introduce Assertion(引入断言)

  • 相关阅读:
    (五)串口通讯方式设置
    (四)计算机上电自启动
    (三)磁盘分区
    (一)老毛桃U盘启动盘制作
    (二)操作系统安装
    计算机常见问题1:计算机网口问题
    Java日志打印方法
    MySQL数据库常见问题1:关于 “ MySQL Installer is running in Community mode ” 的解决办法
    窥见云技术未来大势,腾讯云Techo开发者大会即将在京召开
    揭秘国庆阅兵直播背后的黑科技,腾讯云提供技术支持
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5162969.html
Copyright © 2011-2022 走看看