Я рефакторинг кода, который я написал, и я должен решить, хочу ли я поставить оператор switch в цикл while или повторить цикл while в каждом случае. Эти два способа являются чем-то вроде следующего псевдокода:Выключить оператор в цикл while или while в блоки case?
Вариант 1)
while (cnt > 0) {
switch (value) {
case A:
doSomething();
break;
case B:
doSomethingElse();
break;
...
default:
default();
break;
}
cnt--;
}
Вариант 2)
switch (value) {
case A:
while(cnt > 0){
doSomething();
cnt--;
}
case B:
while(cnt > 0){
doSomethingElse();
cnt--;
}
...
default:
while(cnt > 0){
default();
cnt--;
}
}
Я думаю, что первый вариант следует лучше СУХОЙ принцип, потому что я не повторяйте каждый раз while и cnt--. Хотя мне нравится немного лучше второй вариант, потому что, когда он выбирает случай в инструкции switch, он начинает зацикливаться в то время, и ему больше не нужно оценивать условие переключения.
Итак, какое из этих двух решений вы бы выбрали и почему?
NB: Мы можем предположить, что условие переключения (то есть переменная «значение» в приведенном ниже коде) не изменяется для всего цикла while, другими словами: операции doSomething(), doSomethingElse() и т. Д. . не влияют на оператор switch.
NB2: В реальном коде, над которым я работаю, цикл while может быть очень большим. «ЦНТ», для некоторых тестов, может быть порядка 10^9
Это не пример цикла «antipattern» вообще, поскольку значение цикла не управляет коммутатором. –