2011-04-02 56 views
1

每天我都会遇到这种困境 - 最好的做法是在函数开始时检查一个不需要的状态并立即返回,或者最好的做法是检查所需条件并继续返回假。首次出错或成功时返回

我明白那里不会是一个适合所有解决方案,这是一个真正的风格问题,但我只是对其他开发人员通常会做什么感兴趣。

每当这种情况出现时,我总是会发现自己在犹豫不决。

作为一个例子(在PHP编码):

检查的不希望的状态第一...

function myFunction($myVal) 
{ 
    if ($myVal != 'desiredVal') { 
     return false; 
    } 

    //Continue here with main function code 

    return true; 
} 

或者,检查所需的条件第一...

回答

2

这主要是一个风格问题,两者都是正确的。我发现在顶部的错误检查后,主要的方法功能更清洁,更容易遵循。

最好的建议是选择一种风格并与其保持一致。

0

对于非平凡的功能,我总是喜欢第一种风格;如果您需要查找超过八到十行代码才能找到导致return false;的条件,那么我认为这是易读性的一大障碍。如果函数足够短,可以在一个小块(八行,十行)中读取,那么任何一种方法都可以,但请记住函数会随着时间的推移而增长。这会挑选第一种风格并坚持下去,所以你的代码库具有更高的一致性。

0

我更喜欢第一种情况,只是因为你没有在If语句中包含函数逻辑的其余部分。在第二种风格中,如果在这种情况下“主要功能代码”很长,那么您可以开始忽略第一个If是什么。我还发现,如果被认为是“好”输入的逻辑开始变得越来越复杂,那么可以结束一个非常长的If或一组嵌套的Ifs,其实际功能嵌套深。在第一种情况下,如果您需要测试几个条件以确定您是否具有所需的值并且可以继续,则可以简单地在第一个条件之后添加更多的Ifs,并让它们中的任何一个在失败。对我而言,这更容易维护和遵循。

就像其他人提到的那样,这是一种风格的东西,两种方法都是正确的。最重要的是尝试并保持一致。

0

我发现这是一个很好的阅读 - 汤姆达夫的“从上到下阅读代码”,“其他被认为有害的”部分,http://iq0.com/notes/deep.nesting.html - 不幸的是该链接目前已经死亡。但它基本上归结为其他人所说的。当然,在第一种变体中,由于//主函数代码的缩进级别较低,因此右侧可用空间更多。