案例如下: 您有一个名为FullScreenEnabled的布尔属性。输入一些方法,如果FullScreenEnabled为true,则执行此方法中的代码。您在日常编程中使用以下两种方法中的哪一种:
private bool FullScreenEnabled { get; set; }
// Check if FullScreenEnabled is false and return;
private void Case1()
{
if (FullScreenEnabled == false)
{
return;
}
// code to be executed goes here!
}
// Surround the code by an if statement.
private void Case2()
{
if (FullScreenEnabled)
{
// code to be executed goes here!
}
}
答案 0 :(得分:11)
private void MyMethod(bool arg){
if(arg)
return;
//do stuff
};
(投票)
答案 1 :(得分:3)
我通常更喜欢第一个版本(在方法开始时退出)。它导致较少的嵌套,这略微提高了可读性。如果您决定将来不需要检查条件,那么在第一个版本中删除if条件也会更容易,特别是如果您有几个这样的检查。另外,它可以很容易地写成一行:if(!FullScreenEnabled)return;
答案 2 :(得分:1)
这取决于方法的长度和复杂性。如果方法很短,那么嵌套在if中是没有问题的(并且可能更清楚)。如果该方法有很多嵌套语句,那么立即返回将减少必要的缩进量,并可能略微提高可读性。
答案 3 :(得分:1)
第一种方法(使用保护条款)可以更好地扩展,如果添加更多。第二种方法的问题是,添加更多 if 语句会导致代码显示arrow anti-pattern,其中代码开始被设置为箭头。
有一篇非常好的文章在下面详细解释了这一点:
答案 4 :(得分:0)
这两种方法都没有发布。您应该阅读editing help以确保代码实际显示。
答案 5 :(得分:0)
是否应测试正数或负数,即如果条件不满足则返回方法,或仅在条件满足时执行代码。在一个简短的方法中,我会选择后一种情况,用很长的方法,我会选择前者。当有几个条件需要测试时,我总是会提前退出。但它确实没有什么区别。
但是请注意,您的示例中是与false的比较。你应该写!FullScreenEnabled。使代码更具可读性。
答案 6 :(得分:0)
if (!FullScreenEnabled)
throw new InvalidOperationException("Must be in fullscreen mode to do foo.");
我的两分钱,因为它的价值。
答案 7 :(得分:0)
无论哪种方式都一样。
但是,如果您为单元测试运行代码覆盖率指标,则if (!FullScreenEnabled) return;
将计为单独的块,您必须创建一个单元测试以覆盖它以达到100%。
当然,即使使用其他方法,您也可能希望进行单元测试,以验证在FullScreenEnabled为false时您没有执行代码。但如果你作弊但不写,你仍然得到100%。 : - )
答案 8 :(得分:0)
我会采用第一种方法,我发现它比第二种方法更具可读性。 基本上我认为:
if (FullScreenEnabled == false)
比if (FullScreenEnabled)
更具可读性。 然而,我认为这里有一个不需要交叉的细线,将return
语句放在方法中间的太多地方确实会使它更复杂
答案 9 :(得分:-1)
private void MyMethod(bool arg){
if(!arg){
//do stuff
}
}
(投票)