11

戦略や同様のパターンよりも、スイッチ(ケース)が(単純さを除いて)良い設計選択である場合はありますか...

4

8 に答える 8

28

プリミティブのをテストするときは、スイッチを使用します。(つまり、整数または文字)。

異なるタイプから選択する場合は、ポリモーフィズムを使用します。

例 : ユーザーが入力した文字が 'a'、'b'、または 'c' のいずれであるかをテストすることは、スイッチの仕事です。

扱っているオブジェクトが犬なのか猫なのかをテストすることは、ポリモーフィック ディスパッチの仕事です。

多くの言語では、より複雑な値がある場合、Switch を使用できない場合があります。

于 2008-12-03T02:07:12.540 に答える
18

まず第一に、単純さは多くの場合、優れたデザインの選択です。

スイッチ/ケースに対するこのバイアスを理解できませんでした。はい、それは悪用される可能性がありますが、それは他のほぼすべてのプログラミング構成要素も同様です。

型をオンにすることは通常間違っており、おそらくポリモーフィズムに置き換える必要があります。他のものをオンにすると、通常は問題ありません。

于 2008-12-03T01:31:07.933 に答える
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");
}

戦略でこれを行うのはやり過ぎです。

于 2008-12-03T01:30:55.703 に答える
5

1つは、読みやすさです。

于 2008-12-03T01:18:21.220 に答える
1

スイッチが1か所に 1しかない限り、通常は問題ありません。複数 (または多数) ある場合は、代替案を検討する時期でもあります。

于 2008-12-03T01:23:21.147 に答える
0

「戦略」はスイッチで作成できます。

それが出発点であり、そこからポリモーフィズムに任せることができます。

他にも、柔軟性を犠牲にして追加の速度が必要だと思います。場合もあります。

于 2008-12-03T01:27:14.680 に答える
-1

いいえ、switch ステートメントはおそらく、単純な状況での適切な設計上の選択にすぎません。

単純な状況の switch ステートメントを通過すると、更新と保守を維持するのが非常に困難になります。これが、デザイン パターンが生まれた理由の一部です。

于 2008-12-03T01:48:54.590 に答える
-4

私の見解では、スイッチは常に間違っています。

ケースの本体はコードであり動作であるため、ケース内のもの (「値」) には動作タイプがあるため、ポリモーフィズムの方が適しています。

これは、値が実際には型であることを意味します。たとえば、数値 1 は何らかの形で 1 に等しいすべての型です。あとは、1-ness を特定のケースの動作にマッピングするだけで、他のすべての型とのポリモーフィズムが得られます (良いことです)。

これは、他の言語よりも簡単に実行できる言語もありますが、残念ながら、一般的に使用されているほとんどの言語は非常にひどいものです。

于 2009-11-24T09:03:46.627 に答える