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 "";
}











