代码样式问题在这里.
我看了一下这个问题,询问.NET CLR是否真的总是初始化字段值.(答案是肯定的.)但令我感到震惊的是,我不确定让它做到这一点总是一个好主意.我的想法是,如果我看到这样的声明:
int myBlorgleCount = 0;
我有一个很好的想法,程序员希望计数从零开始,并且可以,至少在不久的将来.另一方面,如果我只是看到:
int myBlorgleCount;
如果0是合法或合理的值,我没有真正的直接想法.如果程序员刚开始阅读和修改它,我不知道程序员是否打算在设置值之前开始使用它,或者他们是否期望它为零等等.
另一方面,一些相当聪明的人和Visual Studio代码清理实用程序告诉我删除这些冗余声明.对此有何普遍共识?(有共识吗?)
我将此标记为语言不可知,但是如果有一个奇怪的情况,那么特别好的想法是针对特定语言的反对,这可能值得指出.
编辑:虽然我确实认为这个问题与语言无关,但它显然不适用于像C这样没有进行值初始化的语言.
编辑:我很欣赏约翰的回答,但这正是我不想要的.我知道.NET(或Java或其他)将完成这项工作并一致且正确地初始化值.我所说的是,如果我看到代码修改了之前未在代码中明确设置的值,我作为代码维护者,不知道原始编码器是否意味着它是默认值,或者只是忘记设置值,或者期望将其设置在其他地方,等等.
考虑长期维护.
保持代码尽可能明确.
如果您不需要,请不要依赖特定于语言的方法进行初始化.也许新版本的语言会有不同的用途?
未来的程序员会感谢你.
管理层会感谢你.
为什么甚至一点点混淆东西呢?
更新:未来的维护者可能来自不同的背景.这真的不是什么是"正确的",而是从长远来看更容易实现的目标.
假设平台以平台的工作方式运行,您始终是安全的..NET平台将所有字段初始化为默认值.如果您看到一个未被代码初始化的字段,则表示该字段由CLR初始化,而不是未初始化.
这种担忧对于不保证初始化但不保证初始化的平台有效.在.NET中,更经常表示开发人员的无知,认为初始化是必要的.
过去的另一个不必要的宿醉如下:
string foo = null; foo = MethodCall();
我从那些应该知道更好的人那里看到了这一点.