Switch(Case)总是错的吗?

Sta*_*low 11 language-agnostic design-patterns switch-statement

是否存在switch(case)是战略或类似模式的良好设计选择(简单除外)的情况......

int*_*tar 25

在测试基元时使用开关.(即整数或字符).

在不同类型之间进行选择时,请使用多态性.

示例:测试用户输入的字符是"a","b"还是"c"之一是交换机的作业.

测试您正在处理的对象是Dog还是Cat是多态分派的工作.

在许多语言中,如果您有更复杂的值,您可能无法使用Switch.


Jam*_*ran 16

首先,Simplicity通常是一个很好的设计选择.

我从来没有理解这种对开关/外壳的偏见.是的,它可以被滥用,但是,所有其他编程结构也是如此.

打开类型通常是错误的,可能应该被多态替换.打开其他东西通常都可以.


Joh*_*n T 5

首先,可读性.


lac*_*ker 5

当然是.很多时候,你的开关只与你整体逻辑的一小部分相关,而且仅仅因为这个小的影响而创建全新的类是错误的.

例如,假设您有一个单词数据库,用户输入另一个单词,并且您希望在数据库中找到该单词但包含可能的复数形式.你可能会写类似(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");
}
Run Code Online (Sandbox Code Playgroud)

用策略做这件事会有点矫枉过正.

  • 此代码目前为15行.如果其他人将其重写为1000多行,同时将其保留为单个switch语句,那就是他们的错,而不是初始switch语句的错误. (4认同)