Replace Parameter with Method
From CSSEMediaWiki
Revision as of 13:08, 23 September 2008 by Geoffrey Clark (Talk | contribs)
Motivation
Refactoring Martin Fowler 1999 states that: "If a method can get a value that is passed in as a parameter by another means, it should."
Example
An object invokes a method, then passes the result as a parameter for a method. The receiver can also invoke this method. So the best idea is to remove the parameter and let the receiver invoke the method.
int basePrice = quantity * itemPrice; discountLevel = getDiscountLevel(); double finalPrice = discountedPrice(basePrice, discountLevel);
Above we have some code, but lets remove the discountLevel parameter from discountedPrice(basePrice, discountLevel). Now we have:
int basePrice = quantity * itemPrice; double finalPrice = discountedPrice(basePrice);
The discountedPrice(basePrice) method now looks like:
discountedPrice(basePrice) { int discountLevel = getDiscountLevel(); //does calculation type stuff here return discountedPrice; }