2009-04-15 137 views
2

在代码审查,我发现我们的C#代码中的许多地方,看起来像这样:布尔类型

if(IsValid()) { 
    return true; 
} 
else { 
    return false; 
} 

,甚至是“更好”:

return (IsValid()? true : false); 

我一直想知道为什么不只是写代码像这样:

return IsValid(); 

这是我写这段代码的方式。我并不质疑开发人员的技能,但也许试图研究开发人员的灵魂。为什么开发人员会喜欢更复杂的代码,而不是更简单直观?或者,原因可能是布尔型难以接受为一流公民?

+0

提醒我有条件的语句,如:如果MyBoolean = True然后... – rvarcher 2009-04-15 17:26:00

+0

返回IsValid()?真:是真的?真:是真的?真:是真的?真假; – Juliet 2009-04-15 17:26:48

回答

6

是的,你应该照你说的去做。这些人正在做这些过于冗长的事情,因为他们最初是以这种方式学习的,可能是在CS 101中,他们从来没有想过要走出的空间,他们知道的作用是看看是否有更好,更简单的方法。

这确实与他们的能力有关。优秀的程序员需要更体贴一点,而且更少隐藏。请参阅https://stackoverflow.com/questions/423823#424005,https://stackoverflow.com/questions/423823#423915

15

我认为return IsValid();是完全有效和可读的代码。

顺便说一句,我肯定会打人谁写(IsValid() ? true : false)在脸上。这是不必要的复杂。

PS。这是svn blame的设计目的。

+0

借调。我在代码中看到很多第一个例子,并没有得到它。 – Dana 2009-04-15 15:55:36

1

我也只是说“return IsValid();”我认为你这样做是100%正确的

1

return IsValid();是要走的路。更少的代码,更简洁 - 选择冠军

2

前两个例子的原因是完全人:

  • 无知
  • 缺乏与人的代码智力参与
  • 代码被重构,但只有中途

没有理由不(我知道这是一个双重否定)去return IsValid();

3

如果你心不在焉,很容易从这个重构的一些代码:

private bool ConsiderTheOstrich() 
{ 
    /* do ostrich things */ 

    if(someCondition && unpredictableThing == 5) 
     return true; 
    else 
    { 
     // log something 
     return false; 
    } 
} 

要这样:

private void IsValid() { return (someCondition && unpredictableThing == 5); } 

/* ... */ 

private void ConsiderTheOstrich() 
{ 
    /* do ostrich things */ 

    if(IsValid()) 
     return true; 
    else 
     return false; // ostrichlogger logs it for us now 
} 

没有注意到为了简洁额外的机会。

1

我甚至有时会看到一些这方面的遗留代码的我维护:

bool retValue; 
if (IsValid()) 
{ 
    retValue = true; 
} 
else 
{ 
    retValue = false; 
} 

return retValue; 

用字符支付一些程序员?

0

是的,当然return IsValid();将是最理想的,如果你有唯一的代码是如上。

我想你会发挥什么,但你的功能还在做什么?其余的代码可能会让开发人员更加关注IsValid()的if语句。毕竟,如果它只是返回IsValid(),那么为什么调用代码不是直接检查IsValid(),而是使用这个包装器方法。

2

当您是第一种情况时更容易调试。当您逐步查看源代码时,无需打开immediate window或运行IsValid();以查看返回值,可以更容易地找出返回值的含义。

对于第一和第二种情况下,开发人员可能不知道她/他可以简单地做

回报的IsValid();

最后,由于公司政策,开发人员可能被迫使用第一种或第二种语法。

0

分心

我知道这是发生在我的代码之前,我可以跟踪回来时,我被中断或不重视而编码到(我只责怪SO!)

无知

不知道更好的方法来做到这一点。我们理所当然地认为所有程序员都是逻辑思考的,但事实并非如此。有些程序员是对他们之前所看到的模式纯粹去:

If (integerA == integerB) { //do special stuff } 

//Given integer equality; boolean equality ought to look the same... 
If (isValid() == true) { //do special stuff } 

动量

那怎么有人一直做到了,所以这就是他们继续这样做。