我正在尝试优化我必须重构的代码。没有任何优化的代码会有一些switch语句。如果在switch语句中发生错误,则会向调用方法返回错误,例如:
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;
}
我正在重构代码,所以我没有在switch语句中返回错误,而是我在标记变量中存在错误:
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;
当没有错误时会出现问题,因为我们正在添加另一个if语句,如果每秒多次调用该方法会导致性能问题。我想避免每次检查病情。有什么建议我可以改进这段代码吗?任何转换重构技巧?
//编辑:我知道这个例子可能看起来很愚蠢(因为重构不会看起来非常有用)但是我重构的实际代码确实需要它(相信我)所以我试着不要最终代码中的松散性能。
答案 0 :(得分:2)
一般的经验法则是switch
语句可以被查找表或数组替换。这些表的一个优点是,它们可以很容易地以极低的性能成本进行更新,并且对查找功能(引擎)几乎没有任何修改。
以下是一些想法:
如果条件检查有模式,请将变量放入表中。让引擎执行检查。
将函数指针放入表中以执行检查。如果函数指针为NULL,则表示没有检查。