Is Switch (Case) always wrong?

后端 未结 8 822
情歌与酒
情歌与酒 2020-12-19 00:37

Are there instances where switch(case) is is a good design choice (except for simplicity) over strategy or similar patterns...

相关标签:
8条回答
  • 2020-12-19 00:44

    For one, readability.

    0 讨论(0)
  • 2020-12-19 00:48

    Yes, definitely. Many times your switch is only relevant to a very small part of your overall logic and it would be a mistake to create whole new classes just for this minor effect.

    For example, let's say you have a database of words, the user input another word, and you want to find that word in the database but include possible plurals. You might write something like (C++)

    
    vector<string> possible_forms;
    possible_forms.push_back(word);
    char last_letter = word[word.size() - 1];
    switch (last_letter) {
      case 's':
      case 'i':
      case 'z':
        possible_forms.push_back(word + "es");
        break;
      case 'y':
        possible_forms.push_back(word.substr(0, word.size() - 1) + "ies");
        break;
      default:
        possible_forms.push_back(word + "s");
    }
    

    Doing this with strategies would be overkill.

    0 讨论(0)
  • 2020-12-19 00:49

    The "strategies" could be created with a switch.

    That could be the starting point and from there let the polymorphism do the job.

    Other that comes to mind need for extra speed at the cost of flexibility. There are cases.

    0 讨论(0)
  • 2020-12-19 00:54

    Use Switches when you're testing on values of primitives. (ie. integers or characters).

    Use polymorphism when you are choosing between different types.

    Examples : Testing whether a character the user has entered is one of 'a', 'b' or 'c' is a job for a switch.

    Testing whether the object you're dealing with is a Dog or Cat is a job for polymorphic dispatch.

    In many languages, if you have more complicated values you may not be able to use Switch anyway.

    0 讨论(0)
  • 2020-12-19 00:58

    No, the switch statement is probably only a good design choice in simple situations.

    Once you are passed a simple situation switch statements become very painful to keep updating and maintaining. This is part of the reason design patterns came about.

    0 讨论(0)
  • 2020-12-19 01:01

    First of all, Simplicity often is a good design choice.

    I never understood this bias against switch/case. Yes, it can be abused, but that, so can just about every other programming construct.

    Switching on a type is usually wrong and probably should be replaced by polymorphism. Switching on other things is usually OK.

    0 讨论(0)
提交回复
热议问题