Beware value switches

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
(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

See also

Personal tools