我有这些很长的if - else / switch语句,真的很长,并且它们使代码难以阅读。所以只是想知道有没有办法摆脱它们?也许就像为每个条件使用一个类然后使用责任链模式?
你会建议采用什么方法?
以下是示例代码:
if ( cc == LIB_DEFINED_CONSTANT_1 )
{
response = "-1";
errorWindow->setText ( "The operation timed out.\nPlease try again later." );
errorWindow->show ( );
}
else if ( cc == LIB_DEFINED_CONSTANT_2 )
{
response = "-1";
errorWindow->setText ( "Couldn't conect to the server.\nPlease try again later." );
errorWindow->show ( );
}
else if ( cc == LIB_DEFINED_CONSTANT_3 )
{
response = "-1";
errorWindow->setText ( "Access is denied.\nPlease contact our support team." );
errorWindow->show ( );
}
else if ( cc == LIB_DEFINED_CONSTANT_4 )
{
response = "-1";
errorWindow->setText ( "Credentials and varified\nPlease contact our support team." );
errorWindow->show ( );
}
else if ....
正如您所看到的,除了为errorWindow设置文本外,条件标记中的大多数代码都是类似的。
编辑: 如果人们可以对他们投票的原因发表评论,那就太好了。
答案 0 :(得分:2)
通常,您应该尝试将代码拆分为小函数/方法,并且每个函数/方法都应该完成一件事。如果你有一个很长的(几页)if / else阻止,你应该重构你的代码。
我认为代码应该是这样的:
if (shouldIdoThing1())
{
doThingOne(withThis, andThis, andThat);
}
else if (shouldIdoThing2())
{
doTheSecondThing(withThisOnly);
}
else
{
doTheOtherThing(withSomethingElseEntirelyPerhaps);
}
并且,如果可能的话,我尝试使我的代码看起来像那样。在大型应用程序中滚动浏览几个页面只是为了检查else
中的操作是一个真正的痛苦......一个人的头脑。