Some methods try to do too many tasks at once. To do this they usually encode lots of different unrelated return values in a String or similar type. Consider the following method.
/**
* @return all the ability strings, separated by a '#' character.
* If the returned string doesn't contain a '#' then it's an error
* A return value of “0” means the player has no abilities
* A return value of “dead” means the player is dead
*/
public String getAbilities(String playerName)
{
:
The special return values from getAbilities are many:
“healing#speed#strength#levitation” - delimited ability strings
“Error: Player not found” - an error message
“0” - an indication that no abilities are present
“dead” - the player is dead.
A nightmare for the caller who has to cater for each case. As it turns out, the developer has coded what should probably be two separate methods into one.
public String[] getAbilities(String playerName)
throws PlayException;
public String isDead(String playerName);
Using the new methods:
Rather than use '#' to separate ability names, a neatly prepared array of values is returned by getAbilities().
Rather than return an error in getAbilities(), a PlayException is thrown. The caller can defer handling this exception.
Rather than return “0”, getAbilities() returns an empty array to indicate no abilities, not null.
Rather than return “dead” a new method isDead( ) is called.