代码样式问题在这里.
我看了一下这个问题,询问.NET CLR是否真的总是初始化字段值.(答案是肯定的.)但令我感到震惊的是,我不确定让它做到这一点总是一个好主意.我的想法是,如果我看到这样的声明:
int myBlorgleCount = 0;
Run Code Online (Sandbox Code Playgroud)
我有一个很好的想法,程序员希望计数从零开始,并且可以,至少在不久的将来.另一方面,如果我只是看到:
int myBlorgleCount;
Run Code Online (Sandbox Code Playgroud)
如果0是合法或合理的值,我没有真正的直接想法.如果程序员刚开始阅读和修改它,我不知道程序员是否打算在设置值之前开始使用它,或者他们是否期望它为零等等.
另一方面,一些相当聪明的人和Visual Studio代码清理实用程序告诉我删除这些冗余声明.对此有何普遍共识?(有共识吗?)
我将此标记为语言不可知,但是如果有一个奇怪的情况,那么特别好的想法是针对特定语言的反对,这可能值得指出.
编辑:虽然我确实认为这个问题与语言无关,但它显然不适用于像C这样没有进行值初始化的语言.
编辑:我很欣赏约翰的回答,但这正是我不想要的.我知道.NET(或Java或其他)将完成这项工作并一致且正确地初始化值.我所说的是,如果我看到代码修改了之前未在代码中明确设置的值,我作为代码维护者,不知道原始编码器是否意味着它是默认值,或者只是忘记设置值,或者期望将其设置在其他地方,等等.
在为字段分配默认默认值时(此处为bool的false),FxCop说:
Resolution : "'Bar.Bar()' initializes field 'Bar.foo'
of type 'bool' to false. Remove this initialization
because it will be done automatically by the runtime."
Run Code Online (Sandbox Code Playgroud)
现在,我知道代码是int a = 0或bool ok = false正在引入一些冗余,但对我而言,它似乎是一个非常非常好的代码实践,我的老师在我看来坚持正确的代码实践.
不仅性能损失很小,更重要的是:依赖于默认值依赖于每个程序员的知识,使用一段代码,在默认的每种数据类型上.(约会时间?)
说真的,我觉得这很奇怪:应该保护你不要犯下太明显错误的程序,建议在这里制作一个,只是为了提高性能?(我们在这里讨论初始化代码,只执行一次!那些关心那么多的程序员当然可以省略初始化(并且应该使用C或汇编程序:-)).
FxCop在这里犯了一个明显的错误,还是有更多呢?
两个更新:
这不仅仅是我的观点,而是我在大学(比利时)教过的.并不是说我喜欢使用一个 论证广告verecundiam,而只是为了表明这不仅仅是我的观点.关于那个:
道歉,我刚刚发现了这个: