Beware value switches
From CSSEMediaWiki
Revision as of 03:50, 6 October 2008 by Elliot Fisher (Talk | contribs)
Switching of values is bad, boys and girls, because it's not transparent. A typical bad example is:
class Bird { int bird_type; const int EAGLE = 1; const int DOVE = 2; const int PIGEON = 3; move() { switch (bird_type) { case EAGLE: // blah case DOVE: // blah case PIGEON: // blah } } }
Here, this code is screaming out for subclasses, and one can usually make the code much cleaner by using subclasses.
As usual though, there are exceptions. Factory methods generally require a switch statement of some sort.
The key things to remember are:
- Replace switch statements with subclasses if you can.
- If you can't, keep the switch statement as hidden as possible, keep it as small as possible, and:
- Strongly avoid switching on the same thing in multiple places in the code. Ignore this and the likely result is a maintainability nightmare (every time you change the switch, you've got to change several bits of code).
Riel derived this idea from Johnson and Foote 1988 - Eliminate case analysis