2010-07-12 79 views
0

我正在关注书中的一些例子,并且我注意到有两种不同的约定具有各种返回条件。两者有什么区别?如果if包含返回值,我应该使用else吗?

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

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

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

+0

您使用哪种语言? – ChaosPandion 2010-07-12 23:40:40

回答

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  
} 

...我觉得第二个是更可读!

6

如果你的语言包含一个条件操作符,我会推荐使用它。

return condition ? ifTrue : ifFalse; 
+1

或者,在工作中,您可能会选择不使用会迫使某些人花费额外几秒钟(几分钟)来分析和讨论的操作员。我已经看到了这种浪费很多时间,我从来没有见过简单的如果/然后创造同样的时间下沉。当然,在家里,乐趣越多越好。 – 2010-07-12 23:44:45

+0

我喜欢这种简写,但只有代码简单才有用。 – PBG 2010-07-13 00:24:52

+0

@Pasha - 您当然可以将复杂的逻辑转换为自己的方法。 '返回条件? DoSomethingSpecific():DoSomethingElseSpecific();' – ChaosPandion 2010-07-13 00:26:46

3

除了外观没有区别。无论您选择哪种方式,两者都会返回相同的结果。

2

使用任何你喜欢的东西,并且用你的代码或者你的团队最了解的东西看起来最好。据我所知,这并没有一个真正的公约。

1

就我个人而言,我认为在方法中有一个return语句总是好的,否则代码可能有点难以阅读,因此无法维护。所以做类似的事情

def returnVal = default; 

if (cond) { 
returnVal = whatever 
} 

return returnVal 
+0

理论上我会同意,但是试图让你的代码只有一次返回,这使得它比需要的更复杂。在函数中保持行数很少有助于多个回报看起来干净和易于理解。 – palto 2010-07-12 23:59:36

+0

是的,这更像是一种“艺术”的偏好。我只是认为每个方法的一个return语句看起来不错,并且使得事情变得清晰。隐含的是,希望有小的方法开始,这也有帮助。 另一个说法是,像Eclipse和Intellij这样的IDES都会给出警告。试图从方法返回的地方找出它可能会让人困惑。除非最后只有一个回报...... – hvgotcodes 2010-07-13 01:38:38

+0

我认为当大多数函数调用倾向于在数百或数千行范围内运行时,肯定会使用单个返回事件 - 此时在中间是地狱。现在我们编写了更小的方法,但这种方法往往没有什么帮助(如果有的话),但许多人坚持使用它,因为人们是习惯的生物,而且一旦你告诉别人这是最好的方式,或者它看起来更好,那么他们倾向于坚持它,往往宗教。 – 2010-07-13 17:06:21

3

就个人而言,这种情况出现很多是当你从你的函数/方法调用中消除无效状态。例如:

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

    answer=math; 
     return(answer); 

如果使用elses,最终会产生很多非常可怕的嵌套。

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

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

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

相关问题