如果if包含返回,我应该使用else吗?

时间:2010-07-12 23:39:07

标签: syntax

我正在阅读本书中的一些例子,我注意到了两种不同的约定,它们具有各种返回条件。两者之间有什么区别吗?

//example 1
if(someCondition)
{
   return (someValue);
}
return (someOtherValue);

//example 2
if(someCondition)
{
   return (someValue);
}
else
{
   return (someOtherValue);
}

就个人而言,我更喜欢第二个例子,因为它更明确,我觉得它更具可读性。

6 个答案:

答案 0 :(得分:6)

如果您的语言包含条件运算符,我建议您使用它。

return condition ? ifTrue : ifFalse;

答案 1 :(得分:3)

除了外观之外没有区别。无论你选择哪一个,两者都会返回相同的。

答案 2 :(得分:3)

就此而言,当你从函数/方法调用中消除无效状态时,会出现这种情况。例如:

sqrt(x) {
    if(x < 0)
        return 0;

    answer=math;
        return(answer);

如果你使用elses,你最终可能会遇到很多非常可怕的嵌套。

这也涉及“单一回报”理论 - 很多人认为一个方法应该只有一个return语句。在某些情况下,这也会导致混乱。

在您的具体示例中,它是50/50 IMO。

做你喜欢的事,但我强烈建议尝试“立即测试并返回简单案例”理论。

答案 3 :(得分:2)

使用您喜欢的任何内容,并最好地使用您的代码或您的团队最了解的任何内容。

据我所知,目前还没有这方面的惯例。

答案 4 :(得分:2)

避免else并利用早期return可以防止您的代码过于嵌套。哪个例子看起来更具可读性?

function doStuff (thing) {
  if (thing.foo) {
    alert ("thing.foo is alive and well");
    if (thing.foo.bar) {
      alert ("thing.foo.bar is alive and well");
      if (thing.foo.bar.baz) {
        alert ("thing.foo.bar.baz is alive and well");
        // TODO: stuff with thing.foo.bar.baz
      } else {
        alert ("thing.foo.bar.baz doesn't exist!");
      }
    } else {
      alert ("thing.foo.bar doesn't exist!");
    }
  } else {
    alert ("thing.foo doesn't exist!");
  }
}

function doStuff (thing) {
  if (!thing.foo) {
    alert ("thing.foo doesn't exist!");
    return;
  }
  alert ("thing.foo is alive and well");
  if (!thing.foo.bar) {
    alert ("thing.foo.bar doesn't exist!");
    return;
  }
  alert ("thing.foo.bar is alive and well");
  if (!thing.foo.bar.baz) {
    alert ("thing.foo.bar.baz doesn't exist!");
    return;
  }
  alert ("thing.foo.bar.baz is alive and well");
  // TODO: stuff with thing.foo.bar.baz       
}

......我认为第二个更具可读性!

答案 5 :(得分:1)

我个人认为在方法中有一个return语句总是好的,否则代码可能有点难以阅读,因而无法维护。这样做

def returnVal = default;

if (cond) {
 returnVal = whatever
}

return returnVal