每天我总是遇到这种困境 - 最好的做法是在功能开始时检查不需要的状态并立即返回,或者最好的做法是检查所需的条件并继续返回false。
据我所知,这不是一个适合所有解决方案而且这确实是一个风格问题,但我只对其他开发人员通常会做的事情感兴趣。
每当这种情况出现时,我总会发现自己是优柔寡断的。
作为一个例子(用php编码):
首先检查不良情况......
function myFunction($myVal)
{
if ($myVal != 'desiredVal') {
return false;
}
//Continue here with main function code
return true;
}
或者,首先检查所需的条件......
function myFunction($myVal)
{
if ($myVal == 'desiredVal') {
//continue here with main function code
return true;
}
return false;
}
答案 0 :(得分:2)
这主要是风格问题,两者都是正确的。我发现顶部有错误检查,然后主要方法功能更清晰,更容易理解。
最好的建议是选择一种风格并与之保持一致。
答案 1 :(得分:0)
对于非平凡的功能,我总是喜欢第一种风格;如果您需要查找超过8到10行代码来查找导致return false;
的条件,那么我会说这是一个很好的障碍。如果函数足够短,可以在一个小块(八行,十行)中读取,那么任何一种方法都可以,请记住,函数会随着时间的推移而增长。这样可以选择第一种风格并坚持使用它,因此您的代码库具有更高的一致性。
答案 2 :(得分:0)
我更喜欢第一种情况,因为你没有将其余的函数逻辑包含在If语句中。在第二种风格中,如果在这种情况下“主要功能代码”很长,你可以开始忘记第一个If是什么。我还发现,如果被认为是“好”输入的逻辑变得越来越复杂,你可以使用非常长的If或一组嵌套的Ifs,其中实际的功能是嵌套的。
对于第一种情况,如果您最终必须测试几个条件以确定您是否具有所需的值并且可以继续,则可以在第一个之后添加更多Ifs,并且在失败时返回任何Ifs 。对我来说,这更容易维护和遵循。
据说其他人已经提到这是一种风格的东西,两种方法都是正确的。最重要的是努力保持一致。
答案 3 :(得分:0)
我发现这是一个很好的阅读 - 汤姆达夫的“从上到下阅读代码”,“其他被认为是有害的”部分,http://iq0.com/notes/deep.nesting.html - 遗憾的是该链接目前已经死亡。但它基本上归结为其他人所说的。另外,当然,在第一个版本中,由于//主函数代码的缩进级别较低,因此右侧有更多可用空间。