C++ 无需goto即可重构代码
我有点困惑。如何在没有goto的情况下重构此语句 这样好吗C++ 无需goto即可重构代码,c++,refactoring,goto,C++,Refactoring,Goto,我有点困惑。如何在没有goto的情况下重构此语句 这样好吗 bool expressionFailed = false; if(first_expression) { if(second_expression) { // .... } else expressionsFailed = true; } else expressionsFailed = true; if(expressionsFailed) { //
bool expressionFailed = false;
if(first_expression)
{
if(second_expression)
{
// ....
}
else
expressionsFailed = true;
}
else
expressionsFailed = true;
if(expressionsFailed)
{
// ....
}
我不能使用&,因为当second_expression=false时,需要执行iffirst_expression后面的代码,您可以按如下方式重写它:
if(first_expression)
{
// ....
if(second_expression)
{
// ....
}
}
if(!first_expression || (first_expression && !second_expression))
{
}
您可以按如下方式重写它:
if(first_expression)
{
// ....
if(second_expression)
{
// ....
}
}
if(!first_expression || (first_expression && !second_expression))
{
}
我对您的代码一无所知,但您可以这样做:
void on_error ()
{
//error stuff
}
int main ()
{
if(first_expression)
{
if(second_expression)
{
// ....
}
else
on_error();
}
else
on_error();
}
或者更好:
void job()
{
if(first_expression)
{
if(second_expression)
{
// ....
}
else
throw;
}
else
throw;
}
int main () {
try
{
job();
}
catch ()
{
// err stuff
}
return 0;
}
我对您的代码一无所知,但您可以这样做:
void on_error ()
{
//error stuff
}
int main ()
{
if(first_expression)
{
if(second_expression)
{
// ....
}
else
on_error();
}
else
on_error();
}
或者更好:
void job()
{
if(first_expression)
{
if(second_expression)
{
// ....
}
else
throw;
}
else
throw;
}
int main () {
try
{
job();
}
catch ()
{
// err stuff
}
return 0;
}
你在正确的轨道上。我会简化为:
bool succeeded = false;
if(first_expression)
{
if(second_expression)
{
succeeded = true;
// ....
}
}
if(!succeeded)
{
// ....
}
你在正确的轨道上。我会简化为:
bool succeeded = false;
if(first_expression)
{
if(second_expression)
{
succeeded = true;
// ....
}
}
if(!succeeded)
{
// ....
}
是的,看起来不错。你写的代码是fineUse break而不是goto。是的,看起来不错。你写的代码是fineUse break而不是goto。这对我来说是最好的例子。这对我来说是最好的例子