2011-08-03 86 views
9

在下面的例子中 - 假设返回值没有任何重要性 - 是否有理由选择其中一种方法?if..else vs if(){return}

// Method 1 
function (a, b) { 
    if (a == b){ 
    // I'm just interested in 
    // the stuff happening here 
    } else { 
    // or here 
    } 
return true; 
} 

// Method 2 
function (a, b) { 
    if (a == b){ 
    // I'm just interested in 
    // the stuff happening here 
    return true; 
    } 
    // or here 
    return true; 
} 
+1

您可能需要使用'==因为你在比较而不是'=',而不是设置值。 ;)也有一个简单的'return a == b;'有时候会有诀窍。 – Wabbitseason

+0

只是出于好奇,为什么你会写一个总是返回true或返回值没有意义的方法?没有边缘情况吗? – Kumar

+1

如果返回值没有重要性,那么为什么显式回报呢?只要让代码“通过”即可。 –

回答

3

我更喜欢方法1,因为它不太令人困惑。此外,重复代码更少。

+0

这真的是一种风格的东西,一个更具说明性(如果有的话),另一个更简短。我更喜欢第二个更好的自己。 – IRegretable

+0

我不同意。具有多个返回语句会使代码更加难以遵循(认为递归!),尤其是当它可以避免时。在这种情况下,我们总是回归真实! – adu

+0

你是对的,我的意思是方法1 – hspain

0

我会推荐方法1,因为它更具可读性和自我记录。

+1

不同意它更可读。更多的嵌套通常会使代码不易读,并被认为是不好的做法。因此,忽略其他条件是我认为更好的做法。 – Jeff

+0

但是,如果您想在自己的代码中进行编辑,您是否能够轻松理解业务逻辑? –

+0

阅读嵌套的if/elses的多个层次是很难理解业务逻辑,恕我直言。 – Jeff

3

我将我的基础上的代码可读性和清晰度决定,即:

  • 选择方法1,当你需要的,如果块后做更多的东西在块。
  • 选择方法2时,你只需要两个代码块,它是那么清晰的阅读
  • 的情况下,再次选择方法1,你认为明确无字“其他”你的读者不会明白你的神秘代码;当块变得比几行更大时这是常见的。

许多今天的程序员认为缩进比较容易阅读,我同意。在这种情况下,一般首选应该使用第二种方法。

0

这里的可读性实际上取决于函数的作用。

如果此函数总是返回true,那么我宁愿方法1很明显,因为它只返回一个地方,并且很容易看到它永远是真实的。

在上述情况下,方法2更令人困惑。它在多个地方返回,并因此更混乱。考虑一下开发人员不必要地遍历可能的分支,然后看看它们如何影响返回值。在这种简单的情况下,它不是什么大问题,但是当你得到更复杂的条件时,我真的会避免这种方法。

如果if块中的代码非常少,我只会使用方法2。比如一些会处理边缘案例的东西。

希望有所帮助。

5

似乎最佳实践(主要是我工作过的地方)是在方法或函数顶部设置默认值,并且只在发生某些情况时才更改这些值。因此,不需要使用else,所以方法2是优选的。

由于该示例是JavaScript,因此需要特别注意代码大小。因此方法2将为相同的功能创建更少的代码,从而将其论点作为首选。

但是,如果您有超过2个可能的条件,则其他或其他如果无法避免。但是,在这些情况下,我工作的大多数地方都喜欢使用Switch Case。

0

任何现代浏览器的解释器都应该消除任何方向的性能优势。

有几个原因方法1是优选的,尚未提及。有一个单一的退出点使得任何未来的修改都需要两个分支共同的操作更容易和不太可能是错误的(因为作者错过了早期的回报。同样,在某些情况下,通过提供放置断点或alert()的通用位置,它使调试变得更容易。

-4

如果返回值没有任何重要性,那么第一个变体对我来说更可读,因为我不需要去想什么是返回的f **国王“真”。

如果我们将谈论return;(是否有可能在JS?),而不是return true; 我更喜欢第一个,如果变体是同样的,我的情况比较喜欢第二像

function doForList($elem){ 
    if($elem.last()) 
     return; //extreme case 
    // A lot of code 

}