C++ 摆脱if-else并切换到c++;
我有这些很长的if-else/switch语句,非常长,它们使代码很难阅读。所以我只是想知道有没有办法摆脱他们?可能是对每个条件使用一个类,然后使用责任链模式 你建议采取什么样的方法 下面是一个示例代码:C++ 摆脱if-else并切换到c++;,c++,oop,design-patterns,C++,Oop,Design Patterns,我有这些很长的if-else/switch语句,非常长,它们使代码很难阅读。所以我只是想知道有没有办法摆脱他们?可能是对每个条件使用一个类,然后使用责任链模式 你建议采取什么样的方法 下面是一个示例代码: if ( cc == LIB_DEFINED_CONSTANT_1 ) { response = "-1"; errorWindow->setText ( "The operation timed out.\nPlease try
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设置文本
编辑:如果人们可以就他们为什么投了反对票留下评论,那就太好了。一般来说,你应该尝试将你的代码分成几个小函数/方法,每个函数/方法应该只做一件事。如果If/else块很长(几页),您可能应该重构代码 我认为代码应该是这样的:
if (shouldIdoThing1())
{
doThingOne(withThis, andThis, andThat);
}
else if (shouldIdoThing2())
{
doTheSecondThing(withThisOnly);
}
else
{
doTheOtherThing(withSomethingElseEntirelyPerhaps);
}
如果可能的话,我试着让我的代码看起来像那样。在大型应用程序中,滚动几个页面只是为了检查
else
中的操作是一个真正的难题。。。一个人的头脑。这取决于他们解决了什么问题,但这可能是可以用数组、地图或状态机解决的问题。谁知道。。。没有看到代码,或者至少没有更全面的解释,说明测试的条件是什么,每个受控块中执行的代码是什么。没有代码,我不知道。在你的问题中放一个最小的样本,比如说2或3个你的条件。在没有更多上下文的情况下,您不会得到太多的答案。在您的示例中,除了字符串的内容之外,您正在复制所有内容。从消除重复开始,即分解出与单个位置完全相同的行。您将得到一个错误代码和字符串描述的表格,您将能够解决这个特定的问题。我认为这个问题应该放在更合适的位置,因为代码正在以它应该的方式工作(据我从您的问题中所看到的),并且您正在寻求改进建议。我认为@DanielDaranas给出了迄今为止最有用的提示:将错误代码存储在一个数组中(最好是std::vector
),并将相应的错误消息存储在另一个数组中(std::vector
),或者创建一个包含错误代码和消息的struct
,并将它们全部放入一个数组中。细节留给读者作为练习;)我认为这并没有解决问题,因为它特别要求去掉if/else语句。@Piotr99他想要去掉“非常长”的语句,这些语句“使代码难以阅读”。我的回答涉及这些问题。