Contents
- 1. Chapter 6 Composing Methods
- 1.1. Extract Method p110
- 1.2. Inline Method p117
- 1.3. Inline Temp p119
- 1.4. Replace Temp with Query p120
- 1.5. Introduce Explaining Variable p124
- 1.6. Split Temprorary Variable p128
- 1.7. Remove Assignments to Parameters p131
- 1.8. Replace Method with Method Object p135
- 1.9. Substititude Algorithm p139
 
 
1.1. Extract Method p110 ¶
- You have a code fragment that can be grouped together.
 Turn the fragment into a method whose name explains the purpose of the method.
 
 
- 하나로 묶을 수 있는 작은 코드 조각들에 대해서, 그 목적을 잘 표현하는 이름을 가진 메소드에 넣자.
 
~cpp 
    void printOwing(double amount){
        printBanner();
        // print details
        System.out.println( "name:" + _name);
        System.out.println( "amount" + amount);
    }
~cpp 
    void printOwing(double amount){
        printBanner();
        // print details
        printDetails( amount );
    }
    void printDetails (double amount){
        System.out.println( "name:" + _name);
        System.out.println( "amount" + amount);
    }
1.2. Inline Method p117 ¶
- A method's body is just as clear as its name. 
 Put the method's body into the body of its callers and remove the method.
 
~cpp 
    int getRating(){
        return (moreThanFiveLateDeliveries())?2:1;
    }
    boolean moreThanFiveLateDeliveries(){
        return _numberOfLateDeliveries > 5;
    }
~cpp 
    int getRating(){
        return (_numberOfLateDeliveries>5)?2:1;
    }
1.3. Inline Temp p119 ¶
- You have a temp that is assigned to once twith a simple expression, and the temp is getting in the way of other refactorings. 
 Replace all references to that temp with the expression.
 
~cpp 
    double basePrice = anOrder.basePrice();
    return (basePrice > 1000)
~cpp 
    return (anOrder.BasePrice() > 1000)
1.5. Introduce Explaining Variable p124 ¶
- You have a complicated expression. 
 Put the result of the expression, or parts of the expression,in a temporary variagle with a name that explains the purpose.
 
~cpp 
    if ( (platform.toUpperCase().indexOf("MAC") > -1) &&
         (browser.toUpperCase().indexOf("IE") > -1) &&
         wasInittialized() && resize > 0)
    {
        // do something
    }
~cpp 
    final boolean isMacOs = platform.toUpperCase().indexOf("MAX") > -1;
    final boolean isIEBrowser = browser.toUpperCase().indexOf("IE") > -1);
    final boolean wasResized = resize > 0;
    if ( isMaxOs && isIEBrowser && wasResized ) {
        // do something
    }
1.6. Split Temprorary Variable p128 ¶
- You have a temporary variagle assigned to more than once, bur is not a loop variagle nor a collecting temporary variagle. 
 Make a separate temporary variagle for each assignment.
 
~cpp 
    double temp = 2 * (_height + _width);
    System.out.println (temp);
    temp = _height * _width;
    System.out.println(temp);
~cpp 
    final double perimeter = 2 * (_height + width);
    System.out.println(perimeter);
    final dougle area = _height * _width;
    System.out.println(area);
1.7. Remove Assignments to Parameters p131 ¶
- The code assigns to a parameter. Use a temporary variagle instead.
 
~cpp 
    int descount ( int inputVal, int Quantity, int yearToDate) {
        if (inputVal > 50) inputVal -= 2;
    
~cpp 
    int descount ( int inputVal, int Quantity, int yearToDate) {
        int result = inputVal;
        if (inputVal > 50) return -= 2;
1.8. Replace Method with Method Object p135 ¶
- You have a long method that uses local variagles in such a way that you cannot apply Extract Method(110). 
 
 
~cpp 
    class Order ...
        double price() {
            double primaryBasePrice;
            double secondaryBasePrice;
            double teriaryBasePrice;
            // long computation;
            ...
    }
1.9. Substititude Algorithm p139 ¶
- You want to replace an altorithm with one that is clearer. 
 Replace the body of the method with the new altorithm.
 
~cpp 
    String foundPerson(String[] people){
        for (int i = 0; i < people.length; i++) {
            if (people[i].equals ("Don")){
                return "Don";
            }
            if (people[i].equals ("John")){
                return "John";
            }
            if (people[i].equals ("Kent")){
                return "Kent";
            }
        }
        return "";
    }
~cpp 
    String foundPerson(String[] people){
        ListCandidates = Arrays.asList(new String[] {"Don", John", "Kent"});
        for (int i = 0; i < people.length; i++)
            if (candidates.contains(people[i]))
                return people[i];
        return "";
    }














