Beware value switches

From CSSEMediaWiki
Revision as of 03:50, 6 October 2008 by Elliot Fisher (Talk | contribs)
Jump to: navigation, search

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