布尔类型

在代码审查期间,我发现我们的C#代码的许多地方看起来像这样:

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

甚至“更好”:

 return (IsValid()? true : false); 

我总是想知道为什么不写这样的代码:

 return IsValid(); 

这是我编写此代码的方式。 我不是在质疑开发人员的技能,但可能试图调查开发人员的灵魂。 为什么开发人员喜欢更复杂的代码而不是更简单直观? 或许原因是很难接受布尔类型作为一等公民?

是的,你应该按照你的说法去做。 这些人正在做这些过于冗长的事情,因为他们首先以这种方式学习,也许是在CS 101中,并且他们从未想过要走出他们所知道的空间,看看是否有更好,更简单的方法。

这确实说明了他们的能力。 优秀的程序员需要更周到,更少的隐藏。

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

顺便说一下,我肯定会打击任何写作的人( IsValid() ? true : false )。 这是不必要的复杂。

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

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

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

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

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

 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 } 

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

调试时,第一种情况更容易。 单步执行源代码时,无需打开immediate window或运行IsValid(); ,就可以更轻松地找出返回值的内容IsValid(); 只是为了看到返回值。

对于第一个和第二个案例,开发人员可能不知道他/她可以干脆做

return IsValid();

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

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

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

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

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

有些程序员是按角色付费的吗?

是的,当然return IsValid(); 如果您拥有的唯一代码如上所述,那将是最佳选择。

我想发挥作用的是你的function还有什么呢? 其余代码可能会更清楚地说明开发人员为什么会在IsValid()周围放置if语句。

毕竟,如果它只是返回IsValid()那么为什么调用代码不直接检查IsValid()而不是使用这个包装器方法。

娱乐

我知道它发生在我之前的代码中,我可以追溯到我被打断或者在编码时没有注意的时候(我完全责备SO!)

无知

不知道更好的方法。 我们理所当然地认为所有程序员都在逻辑上思考,但事实并非如此。 一些程序员纯粹基于他们之前看到过的模式:

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

动量

这就是某人总是如此做到的,因此他们继续这样做。