重构代码没有goto

时间:2016-08-10 04:47:32

标签: c++ refactoring goto

我有点困惑。如果没有goto

,如何重构此声明
if(first_expression)
{
    // ....
    if(second_expression)
    {
        // ....
    }
    else
    {
        goto jump_out;
    }
}
else
{
    jump_out:
    // ....
}

这是好方法吗?

bool expressionFailed = false;
if(first_expression)
{
    if(second_expression)
    {
        // ....
    }
    else
        expressionsFailed = true;
}
else
    expressionsFailed = true;

if(expressionsFailed)
{
    // ....
}

我无法使用&&,因为在if(first_expression)

时需要执行second_expression = false之后的代码

3 个答案:

答案 0 :(得分:2)

我对您的代码一无所知,但您可以这样做:

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;
}

答案 1 :(得分:2)

你走在正确的轨道上。我会将其简化为:

validate

答案 2 :(得分:0)

您可以按如下方式重写它:

if(first_expression)
{
    // ....
    if(second_expression)
    {
        // ....
    }
}
if(!first_expression || (first_expression && !second_expression))
{
}