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(引入断言)

  • 相关阅读:
    (Good Bye 2019) Codeforces 1270B Interesting Subarray
    (Good Bye 2019) Codeforces 1270A Card Game
    Codeforces 1283D Christmas Trees(BFS)
    Codeforces 1283C Friends and Gifts
    Codeforces 1283B Candies Division
    1095 Cars on Campus (30)
    1080 Graduate Admission (30)
    1099 Build A Binary Search Tree (30)
    1018 Public Bike Management (30)
    1087 All Roads Lead to Rome (30)
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5162969.html
Copyright © 2011-2022 走看看