Switch(Case)总是错的吗?

时间:2008-12-03 01:15:35

标签: language-agnostic design-patterns switch-statement

对于策略或类似模式,是否存在switch(case)是一个很好的设计选择(除了简单性)的实例......

8 个答案:

答案 0 :(得分:25)

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

在不同的类型中选择时使用多态。

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

测试您正在处理的对象是狗还是猫是多态分派的工作。

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

答案 1 :(得分:16)

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

我从未理解这种对开关/案例的偏见。是的,它可以被滥用,但是,所有其他编程结构也是如此。

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

答案 2 :(得分:5)

一,可读性。

答案 3 :(得分: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");
}

用策略做这件事会有点过分。

答案 4 :(得分:1)

通常没问题,只要你在一个的地方只有一个开关。如果你有多个(或多个),那么也是时候考虑其他选择了。

答案 5 :(得分:0)

可以使用开关创建“策略”。

这可能是起点,从那里让多态性完成这项工作。

其他需要考虑的灵活性需要额外的速度。有案例。

答案 6 :(得分:-2)

,在简单的情况下,switch语句可能只是一个很好的设计选择。

一旦通过简单的情况,切换语句就会变得非常痛苦,无法继续更新和维护。这是设计模式产生的部分原因。

答案 7 :(得分:-4)

我认为开关总是错误的:

案例正文是代码而行为, 因此,案例中的事物('价值')具有行为类型, 因此,多态性将是一个更好的选择。

这意味着值实际上是类型,例如数字1是一种在某种程度上等于1的所有东西。剩下的就是让我们将1-ness映射到我们特定情况的行为,并且我们对所有其他类型(一件好事)都有多态性。

在某些语言中,这比其他语言更容易完成,遗憾的是,大多数常用的语言非常糟糕,因此阻力最小的路径是错误的,人们最终会编写switch或if语句(同样的事情)。 / p>