Я, кажется, вижу это достаточно часто в своем коде и других. В этом нет ничего ужасного, но меня это раздражает, поскольку кажется, что это можно сделать лучше. Я предполагаю, что оператор case может иметь немного больше смысла, но часто переменная является типом, который не работает хорошо или вообще не работает с операторами case (в зависимости от языка)
If variable == A
if (Flag == true)
doFooA()
else
doFooA2
else if variable == B
if (Flag == true)
doFooB()
else
doFooB2
else if variable == C
if (Flag == true)
doFooC()
else
doFooC2
Кажется, есть несколько способов «учесть» это, например, 2 набора if-elses, где один набор обрабатывает, когда Flag == true.
Есть ли «хороший способ» это учесть, или, возможно, когда происходит алгоритм «если-то еще», это обычно означает, что вы делаете что-то не так?
code-quality
TruthOf42
источник
источник
if (Flag == true)
а не простоIf (Flag)
? Если вы думаете, чтоIf (Flag == true)
лучше, то почему бы и нетif ((Flag == true) == true)
?Ответы:
Это может быть обработано с полиморфизмом.
Всякий раз, когда у вас есть куча проверок if / else на тип чего-либо, вы можете подумать о централизации проверки if / else в фабричном методе с последующим полиморфным вызовом doFoo (). Но это может быть чрезмерным решением для одноразового решения.
Возможно, вы могли бы создать карту ключ / значение, где ключом является var / flag, а значением является сама функция.
источник
Несколько вложенных if увеличивают цикломатическую сложность кода. До недавнего времени наличие нескольких точек выхода в функциях считалось плохо структурированным кодом, но теперь, пока код прост и короток , вы можете сделать это, сделав код тривиальным для чтения:
источник
Другой вариант - объединить if и switch. Это не превосходит вашу вложенную технику, но может уменьшить количество повторяющихся тестов (если коммутатор оптимизируется под таблицу переходов).
источник
Ну, всегда есть это ...
Но, честно говоря, я думаю, что оригинальный код не так уж и плох.
источник
Используйте полиморфизм и
rule
массивИли как
mike30
предложено: если условия правила могут легко сформировать ключ, тогда наилучшим способом будет использование хэш-карты.источник