Существуют ли случаи, когда switch (case) является хорошим выбором дизайна (за исключением простоты) по сравнению с стратегией или аналогичными шаблонами...
Всегда ли Switch (Case) неправильно?
Ответ 1
Используйте переключатели, когда вы тестируете значения примитивов. (т.е. целые числа или символы).
Используйте полиморфизм, когда вы выбираете между разными типами.
Примеры: Тестирование того, является ли символ, который пользователь ввел, является одним из "a", "b" или "c", является заданием для коммутатора.
Тестирование того, является ли объект, с которым вы имеете дело, является Dog или Cat - это задание для полиморфной отправки.
На многих языках, если у вас есть более сложные значения, вы все равно не сможете использовать Switch.
Ответ 2
Прежде всего, Simplicity часто является хорошим выбором дизайна.
Я никогда не понимал этого уклона от переключения/случая. Да, это можно злоупотреблять, но это может быть почти любой другой конструкцией программирования.
Включение типа обычно неверно и, вероятно, должно быть заменено полиморфизмом. Включение других вещей обычно нормально.
Ответ 3
С одной стороны, читаемость.
Ответ 4
Да, определенно. Много раз ваш коммутатор относится только к очень малой части вашей общей логики, и было бы ошибкой создавать целые новые классы только для этого незначительного эффекта.
Например, скажем, у вас есть база данных слов, пользователь вводит другое слово, и вы хотите найти это слово в базе данных, но включить возможные множественные числа. Вы можете написать что-то вроде (С++)
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");
}
Выполнение этого со стратегиями будет излишним.
Ответ 5
обычно это нормально, если у вас есть только один переключатель в одном месте. когда у вас более одного (или много), тогда время тоже рассматривает альтернативы.
Ответ 6
"Стратегии" могут быть созданы с помощью переключателя.
Это может быть отправной точкой, и оттуда пусть полиморфизм выполнит эту работу.
Другое, что приходит на ум, требует дополнительной скорости за счет гибкости. Есть случаи.
Ответ 7
Нет, оператор switch, вероятно, является лишь хорошим выбором дизайна в простых ситуациях.
После того, как вы передали простые ситуации, операторы переключения режимов становятся очень болезненными, чтобы продолжать обновлять и поддерживать. Это часть причин, по которым создавались шаблоны проектирования.
Ответ 8
Если бы это было всегда неправильно, оно не включалось бы во многие языки. С другой стороны, есть много простых способов написать плохой код с помощью оператора switch. Идите и используйте их, но обратите особое внимание на то, что вы делаете, если вы это сделаете.
Ответ 9
Мое мнение в том, что переключатель всегда неверен:
Тело корпуса - это код и поведение, поэтому вещь в случае ( "значение" ) имеет поведенческий тип, поэтому полиморфизм будет лучшим выбором.
Это означает, что значения фактически являются типами, например. число 1 является типом всего, что равно 1. Все, что остается, - это сопоставить 1-меру с поведением для нашего конкретного случая, и мы имеем полиморфизм со всеми этими другими типами (Хорошая Вещь).
Это проще сделать на некоторых языках, чем другие, к сожалению, большинство используемых языков довольно ужасно, поэтому путь наименьшего сопротивления неверен, и люди в конечном итоге пишут переключатели или заявления (то же самое).