布尔类型
在代码审查期间,我发现我们的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 }
动量
这就是某人总是如此做到的,因此他们继续这样做。