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

  • 相关阅读:
    命令式语言和声明式语言对比——JavaScript实现快速排序为例
    merge sort 的javascript实现
    快速排序算法的简短描述
    Hadoop 2.x 版本的单机模式安装
    数据分析招聘网招聘信息分析报告
    使用PROC TRANSPOSE过程步对数据集进行转置时如何保持日期变量的时间顺序
    饼图微创意
    我的微博关键字
    QQ群成员发言次数统计(词云制作)
    在SAS数据步中执行过程步的简单示例
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5162969.html
Copyright © 2011-2022 走看看