2011-08-03 55 views
0

好吧,这是一个简单的问题,但我想在这里的正确做法的一些oppinions。我不关注性能方面的问题,因为CPU功能非常强大,除非在没有循环构造的情况下调用数千次迭代,否则不会产生任何可察觉的差异。我只想看看什么是公认的标准。什么是从布尔方法返回的公认做法

我有一个方法bascially只是做检查返回一个布尔值。但是,有很多方法来实现这一点。

这是我通常会如何实现这一点。

public bool CanUndo() 
    { 
     if (_nCurrentUndoIndex > 0) 
      return true; 
     else 
      return false; 
    } 

但是,从方法的中间返回时经常被人不悦。我通常这样做的唯一时候是在对这样的表单提交进行检查时。

 if (String.IsNullOrEmpty(firstName.Text)) 
     { 
      MessageBox.Show("Please enter a first name", "Incomplete"); 
      return; 
     } 

我认为这是可以接受的。

回到撤消问题,另一种编码方式就是这样。

public bool CanUndo() 
    { 
     bool returnVal; 
     if (_nCurrentUndoIndex > 0) 
      returnVal = true; 
     else 
      returnVal = false; 
     return returnVal; 
    } 

然而,这无疑分配一个变量,是更详细的代码。另一种选择是。

public bool CanUndo() 
    { 
     bool returnVal = false; 
     if (_nCurrentUndoIndex > 0) 
      returnVal = true; 
     return returnVal; 
    } 

这是更简化,因为它摆脱其他。但是,如果值为真,则通过将其初始化为false来进行不必要的分配。

+0

你担心的是没有多大意义的一个细节的原因应该变得明显。编译器可能会优化掉大部分差异,即使不是这样,除非您正在谈论数百万(不是数千)的循环,否则不太可能会注意到这种差异。 – hatchet

回答

2
public bool CanUndo() { 
    return _nCurrentUndoIndex > 0; 
} 

就我个人而言,我从方法中间返回没有问题。它complicates cleanup code for C functions但随着RAII的说法消失。

我更喜欢作为适合尽快退出,否则你得到

if (x) { 
    if (y) { 
     if (z) { 
      complete 
     } 
    } 
} 

而不是

if (!x) 
    return 

if (!y) 
    return 

if (!z) 
    return 

complete 

这样你避免嵌套,宽线(横屏的空间是昂贵的,纵向空间便宜),你总是知道,如果你仍然在一个功能,那么你不在错误的路径。与此设计配合使用的代码也适用于例外,这非常重要。

+0

是的,我忘记了替代方案,基本上我们将在头文件中实现的内联函数实现为我的C++时代。 – WPFNewbie

+0

也许我选择了一个过于简单的场景。如果条件比较复杂,那么只需进行比较,并且不能在一行中实施,并保持可读性,您会选择三种选项中的哪一种。 – WPFNewbie

+0

假设它不需要添加清理代码,我会采用多重返回路线。如果你必须复制额外分支的清理代码,那么它就成了一个品味问题。对于小功能来说,对于大功能来说,将它们重构成更小的功能并不重要。 – spraff

0
public bool CanUndo() 
{ 
    return (_nCurrentUndoIndex > 0); 
} 
1

你应该总承包布尔返回到他们的逻辑aquivalent,因为这是更容易阅读对于开发商来说,这是更快地为你写的,并得到由编译器反正收缩。

考虑扩大or

if (a == 1) 
    return true; 
else if (a == 2) 
    return true; 
else if (a == 3) 
    return true; 
else 
    return false; 

,当你比较它的约定版本

return (a == 1) || (a == 2) || (a == 3)