Я пытаюсь оптимизировать код, который мне пришлось реорганизовать. Код без каких-либо оптимизаций будет иметь некоторые операторы switch. Если ошибка происходит в распределительном заявлении об ошибке возвращается к вызывающему методу, например:Оптимизация конструкций коммутаторов - как избежать добавления if-clauses
switch(var)
{
case VAL1:
//do something...
break;
case VAL2:
//do something else...
//...
case VAL3:
if (...) // there is any case that can cause error
{
return error1;
}
break;
case VAL4:
if (...) // there is any case that can cause error
{
return error2;
}
break;
case VAL5:
if (...) // there is any case that can cause error
{
return error1;
}
break;
//and so on...
default:
break;
}
Я рефакторинг кода, поэтому я не возвращаю ошибку в операторе переключателя, но вместо этого я маркировкой что произошла ошибка в переменном:
int error_type = -1;
switch(var)
{
case VAL1:
//do something...
break;
case VAL2:
//do something else...
//...
case VAL3:
if (...) // there is any case that can cause error
{
error_type = error1;
}
break;
case VAL4:
if (...) // there is any case that can cause error
{
error_type = error2;
}
break;
case VAL5:
if (...) // there is any case that can cause error
{
error_type = error1;
}
break;
//and so on...
default:
break;
}
if (error_type != -1)
return error_type;
проблема возникает, когда нет никакой ошибки, потому что мы добавляем другое, если заявление, которое может вызвать проблемы с производительностью, если метод вызывается много раз в секунду. Я бы не стал проверять условие каждый раз. Есть ли предложения по улучшению этого кода? Любые трюки с реорганизацией коммутатора?
// EDIT: Я знаю, что этот пример может выглядеть немым (поскольку рефакторинг там не выглядит очень полезным), но фактический код, который я рефакторинг, действительно нуждается в нем (верьте мне), поэтому я стараюсь не потерять производительность в конечном коде.
Каковы возможные значения для var? –
Есть ли общность в условиях if? –
"* Я хотел бы избегать проверки состояния каждый раз. *" Какой? – alk