1

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

见下文:

bool b;

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

else
{
b = false;
}
return b;
}
4

6 回答 6

7

关于什么

return i == 5;
于 2008-12-04T00:27:02.430 回答
6

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

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

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}
于 2008-12-04T00:29:13.893 回答
5

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

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

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

于 2008-12-04T00:34:46.457 回答
0

我想说的是,您是否应该通常只在两个地方从方法返回 - 靠近开始(如在守卫条件下)和接近结束;如果该方法有任何长度,您应该使用您提到的临时变量,否则阅读代码的人可能难以理解它。

于 2008-12-04T00:33:23.947 回答
0

是的,这是很好的风格。

另一种选择(这会很糟糕)是这样做:


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

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

情况并非总是如此,因为编程中的每一个风格点都有好的一面,也有不好的一面。

于 2008-12-04T00:39:52.093 回答
0

正如所指出的,拥有多个 return 语句的缺点是很难找到它们。OTOH 在某些情况下,转义到该 return 语句所需的附加逻辑比该样式正在解决的问题更糟糕。

我知道多次退货的主要问题是您可能很快忘记在新的退货点进行一些清理处理等。恕我直言,这与单一返回表单同样存在问题,因为转义路径必须记住包含该代码而不包含其他代码。一种解决方案(在某些语言(如 c#)中可用)是 finally 块,或者它更简洁地形成范围声明,如此所示。(好的,我现在就拿出我的肥皂盒)

于 2008-12-04T00:52:29.213 回答