戦略や同様のパターンよりも、スイッチ(ケース)が(単純さを除いて)良い設計選択である場合はありますか...
8 に答える
プリミティブの値をテストするときは、スイッチを使用します。(つまり、整数または文字)。
異なるタイプから選択する場合は、ポリモーフィズムを使用します。
例 : ユーザーが入力した文字が 'a'、'b'、または 'c' のいずれであるかをテストすることは、スイッチの仕事です。
扱っているオブジェクトが犬なのか猫なのかをテストすることは、ポリモーフィック ディスパッチの仕事です。
多くの言語では、より複雑な値がある場合、Switch を使用できない場合があります。
まず第一に、単純さは多くの場合、優れたデザインの選択です。
スイッチ/ケースに対するこのバイアスを理解できませんでした。はい、それは悪用される可能性がありますが、それは他のほぼすべてのプログラミング構成要素も同様です。
型をオンにすることは通常間違っており、おそらくポリモーフィズムに置き換える必要があります。他のものをオンにすると、通常は問題ありません。
はい、間違いなく。多くの場合、スイッチはロジック全体の非常に小さな部分にのみ関連しており、このマイナーな効果のためだけにまったく新しいクラスを作成するのは間違いです。
たとえば、単語のデータベースがあり、ユーザーが別の単語を入力し、データベースでその単語を見つけたいが、可能な複数形を含めたいとします。(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");
}
戦略でこれを行うのはやり過ぎです。
1つは、読みやすさです。
スイッチが1か所に 1つしかない限り、通常は問題ありません。複数 (または多数) ある場合は、代替案を検討する時期でもあります。
「戦略」はスイッチで作成できます。
それが出発点であり、そこからポリモーフィズムに任せることができます。
他にも、柔軟性を犠牲にして追加の速度が必要だと思います。場合もあります。
いいえ、switch ステートメントはおそらく、単純な状況での適切な設計上の選択にすぎません。
単純な状況の switch ステートメントを通過すると、更新と保守を維持するのが非常に困難になります。これが、デザイン パターンが生まれた理由の一部です。
私の見解では、スイッチは常に間違っています。
ケースの本体はコードであり動作であるため、ケース内のもの (「値」) には動作タイプがあるため、ポリモーフィズムの方が適しています。
これは、値が実際には型であることを意味します。たとえば、数値 1 は何らかの形で 1 に等しいすべての型です。あとは、1-ness を特定のケースの動作にマッピングするだけで、他のすべての型とのポリモーフィズムが得られます (良いことです)。
これは、他の言語よりも簡単に実行できる言語もありますが、残念ながら、一般的に使用されているほとんどの言語は非常にひどいものです。