Beware value switches
From CSSEMediaWiki
(Difference between revisions)
RobertLechte (Talk | contribs) (New page: 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 in...) |
|||
Line 29: | Line 29: | ||
* If you can't, keep the switch statement as hidden as possible, keep it as small as possible, and: | * 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). | * 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]] | ||
+ | |||
+ | == See also == | ||
+ | * [[Eliminate case analysis]] | ||
+ | * [[Riel's heuristics]] |
Revision as of 03:50, 6 October 2008
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