关于从嵌套语句返回的快速问题

时间:2008-12-04 00:22:48

标签: coding-style function-exit nested-statement

如果我有类似循环或一组if / else语句的东西,并且我想从嵌套中返回一个值(见下文),那么最好的方法是将值赋给字段或财产并归还?

见下文:

bool b;

public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}

else
{
b = false;
}
return b;
}

6 个答案:

答案 0 :(得分:7)

怎么样

return i == 5;

答案 1 :(得分:6)

对此有多种看法。我想大多数人(包括我)倾向于在你得到答案后立即回来,而且没有更多的工作要做。有些人会争辩说你应该只在方法的最后一个陈述中返回。但是,在某些情况下,它实际上会使事情变得更复杂。

按照我的建议,你的例子会更短更简单:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

答案 2 :(得分:5)

如果b仅用于计算方法的返回值,则应将其设为局部变量(在方法中定义)。

public bool ifelse(int i)
{
  bool b;
  /*
  Some code to calculate b
  */
  return b;
}

正如其他人所建议的那样,如果你的方法很简单,我会完全避免使用临时变量,并在知道后立即返回结果。一般规则是使用哪种方法使代码最容易阅读。

答案 3 :(得分:0)

我想说,如果你通常只能从一个方法返回两个地方 - 接近开始(如在保护条件下)和接近结束;如果方法有任何长度,你应该使用你提到的临时变量,否则读取代码的人可能会更难以跟随它。

答案 4 :(得分:0)

是的,那是好风格。

替代方案(错误)将是这样做的:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}

多个返回点被认为是坏风格的原因是,特别是对于较大的方法,可能难以跟踪方法中的程序流,因为它可以在任何点退出。这可能是调试的噩梦。但是,如果您有一个分配给它的返回变量,则可以观察该变量并确切地知道它何时返回(从一个地方)。

这不是总是的情况,因为编程中的每个风格点都有好的方面和坏的方面。

答案 5 :(得分:0)

正如所指出的那样,拥有一个以上的回报声明具有发现它们变得困难的缺点。 OTOH在某些情况下,逃避返回语句所需的附加逻辑更糟糕的是样式正在解决的问题。

我知道多次返回的主要问题是你很快就会忘记在新的返回点进行一些清理处理等。恕我直言,这与单一返回表单一样是一个问题,因为转义路径必须记住包含该代码而不包含其他代码。对于这种解决方案的一种解决方案,在某些语言(如c#)中可用,是最后一个块,或者它是scope statement所示的here。 (好的,我现在就拿到我的肥皂盒)