У меня есть условная логика, которая требует предварительной обработки, которая является общей для каждого из условий (создание экземпляров объектов, поиск баз данных и т. Д.). Я могу думать о 3-х возможных способов сделать это, но каждый из них имеет недостаток:Условия с общей логикой: вопрос о стиле, читаемость, эффективность,
Вариант 1
if A
prepare processing
do A logic
else if B
prepare processing
do B logic
else if C
prepare processing
do C logic
// else do nothing
end
Дефект с вариантом 1 является то, что дорогой код избыточен.
Вариант 2
prepare processing // not necessary unless A, B, or C
if A
do A logic
else if B
do B logic
else if C
do C logic
// else do nothing
end
Недостаток варианта 2 является то, что дорого код работает даже тогда, когда ни А, В или С истинно
Вариант 3
if (A, B, or C)
prepare processing
end
if A
do A logic
else if B
do B logic
else if C
do C logic
end
Недостаток с опцией 3 заключается в том, что условия для A, B, C оцениваются дважды. Оценка также является дорогостоящей.
Теперь, когда я думаю об этом, есть вариант варианта 3, что я называю вариант 4:
Вариант 4
if (A, B, or C)
prepare processing
if A
set D
else if B
set E
else if C
set F
end
end
if D
do A logic
else if E
do B logic
else if F
do C logic
end
Хотя это решать дорогостоящие оценки A, B , и C, это делает все более уродливым, и мне это не нравится.
Как бы вы оценили параметры, и есть ли другие, которых я не вижу?
В целом, компилятор должен уменьшить любой из них альтернативы чему-то довольно эффективному. Поэтому я бы не стал беспокоиться об этом. –
Я не понимаю, как вариант 4 избегает дорогостоящих оценок. Вам все еще нужно делать (A, B или C), за которыми следуют A, B или C (т. Е. Две оценки). –