布尔类型

时间:2009-04-15 15:50:28

标签: c# language-agnostic coding-style boolean

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

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

甚至“更好”:

return (IsValid()? true : false);

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

return IsValid();

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

10 个答案:

答案 0 :(得分:15)

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

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

PS。这是svn blame的目的。

答案 1 :(得分:7)

是的,你应该按照你的说法去做。这些人正在做这些过于冗长的事情,因为他们第一次以这种方式学习它,也许是在CS 101中,并且它们永远不会出现在他们所知道的工作空间之外看看是否存在更好,更简单的方法。

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

答案 2 :(得分:3)

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

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

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

一起去

答案 3 :(得分: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
}

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

答案 4 :(得分:2)

当你 调试 时,第一种情况会更容易。当您浏览源代码时,无需打开immediate window或仅运行IsValid();以查看返回值,就可以更轻松地找出返回值。

对于第一种和第二种情况,开发人员可能 不知道 他/她可以干脆

  

返回IsValid();

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

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

return retValue;

一些程序员是否按角色付费?

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

<强>牵张

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

<强>无知

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

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

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

<强>动量

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