2

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

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

甚至“更好”:

return (IsValid()? true : false);

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

return IsValid();

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

4

10 回答 10

15

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

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

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

于 2009-04-15T15:52:03.327 回答
7

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

这确实说明了他们的能力。优秀的程序员需要多一点深思熟虑,少一些拘谨。

于 2009-04-15T16:00:06.710 回答
3

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

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

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

于 2009-04-15T15:55:42.930 回答
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
}

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

于 2009-04-15T15:59:24.620 回答
2

调试时,第一种情况更容易。当您单步执行您的源代码时,更容易找出返回值是什么,而无需打开immediate window或运行IsValid();只是为了查看返回值。

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

返回 IsValid();

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

于 2009-04-15T16:44:02.563 回答
1

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

于 2009-04-15T15:52:26.260 回答
1

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

于 2009-04-15T15:53:04.200 回答
0

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

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

return retValue;

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

于 2009-04-15T16:00:03.853 回答
0

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

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

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

于 2009-04-15T16:00:59.233 回答
0

分心

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

无知

不知道更好的方法来做到这一点。我们理所当然地认为所有程序员都有逻辑思维,但事实并非如此。一些编码人员纯粹是按照他们以前见过的模式进行的:

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

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

势头

这就是某人一直这样做的方式,因此这就是他们继续这样做的方式。

于 2009-04-15T16:48:31.477 回答