C# 布尔类型

C# 布尔类型,c#,language-agnostic,coding-style,boolean,C#,Language Agnostic,Coding Style,Boolean,在代码审查期间,我发现C#代码的许多地方如下所示: if(IsValid()) { return true; } else { return false; } return IsValid(); 甚至“更好”: 我一直想知道为什么不这样写代码: if(IsValid()) { return true; } else { return false; } return IsValid(); 这就是我编写代码的方式。我不是在质疑开发人员的技能,但可能是想

在代码审查期间,我发现C#代码的许多地方如下所示:

if(IsValid()) {
     return true;
}
else {
     return false;
}
return IsValid();
甚至“更好”:

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

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

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

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

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


注:这就是svn责备的目的。

我还想说“return IsValid();”我认为你这样做是100%正确的是一条路要走。代码更少,更简洁-冠军选择

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

  • 无知
  • 对自己的代码缺乏理智的参与
  • 代码进行了重构,但只进行了一半

没有理由不使用
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
}

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

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

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

return retValue;

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

是的,你应该照你说的做。这些人之所以做这些过于冗长的事情,是因为他们第一次这样学习,可能是在CS 101中,他们从来没有想过要走出他们知道的工作空间,看看是否有更好、更简单的方法


这确实说明了他们的能力。好的程序员需要考虑得更周到一点,也不要太拘谨。

是的,当然
return IsValid()将是最理想的

我猜起作用的是你的功能还做了什么?代码的其余部分可能会更清楚地说明为什么开发人员会在IsValid()周围放置if语句


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

当您调试时,第一种情况更容易。当您单步浏览源代码时,无需打开
即时窗口
或运行
IsValid(),就可以更容易地找到返回值仅查看返回值

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

返回IsValid()


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

分心

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

无知

不知道更好的方法。我们想当然地认为所有程序员都有逻辑思维,但事实并非如此。一些编码人员纯粹是根据他们以前看到的模式:

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

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


有人总是这样做,因此他们也会继续这样做。

附议。我经常在代码中看到第一个示例,但没有理解它。这是一个初学者错误;我看到学生们在CS简介课程中经常这样做。太糟糕了,svn责备不会给你打耳光:)@Damien Pollet:是的,太糟糕了。顺便说一句,我提到过我要打
IsValid()?true:false
,而不是
,如果(IsValid())
,原因是,如果你知道如何使用
?:
你应该有足够的能力不这样写。这可能是严格遵守每个方法一个返回语句的编码风格的结果。@JohnFx——这可能也是真的。我也不喜欢“只有一个返回语句”的哲学:预先告诉我一些条件语句,比如:如果MyBoolean=True,那么…return IsValid()?真的:真的?真的:真的?真的:真的?真:假;