当前位置:  开发笔记 > 编程语言 > 正文

我应该总是/永远/永远不会将对象字段初始化为默认值吗?

如何解决《我应该总是/永远/永远不会将对象字段初始化为默认值吗?》经验,为你挑选了2个好方法。

代码样式问题在这里.

我看了一下这个问题,询问.NET CLR是否真的总是初始化字段值.(答案是肯定的.)但令我感到震惊的是,我不确定让它做到这一点总是一个好主意.我的想法是,如果我看到这样的声明:

int myBlorgleCount = 0;

我有一个很好的想法,程序员希望计数从零开始,并且可以,至少在不久的将来.另一方面,如果我只是看到:

int myBlorgleCount;

如果0是合法或合理的值,我没有真正的直接想法.如果程序员刚开始阅读和修改它,我不知道程序员是否打算在设置值之前开始使用它,或者他们是否期望它为零等等.

另一方面,一些相当聪明的人和Visual Studio代码清理实用程序告诉我删除这些冗余声明.对此有何普遍共识?(有共识吗?)

我将此标记为语言不可知,但是如果有一个奇怪的情况,那么特别好的想法是针对特定语言的反对,这可能值得指出.

编辑:虽然我确实认为这个问题与语言无关,但它显然不适用于像C这样没有进行值初始化的语言.

编辑:我很欣赏约翰的回答,但这正是我想要的.我知道.NET(或Java或其他)将完成这项工作并一致且正确地初始化值.我所说的是,如果我看到代码修改了之前未在代码中明确设置的值,我作为代码维护者,不知道原始编码器是否意味着它是默认值,或者只是忘记设置值,或者期望将其设置在其他地方,等等.



1> Anders Hanss..:

考虑长期维护.

保持代码尽可能明确.

如果您不需要,请不要依赖特定于语言的方法进行初始化.也许新版本的语言会有不同的用途?

未来的程序员会感谢你.

管理层会感谢你.

为什么甚至一点点混淆东西呢?

更新:未来的维护者可能来自不同的背景.这真的不是什么是"正确的",而是从长远来看更容易实现的目标.


对于未来的维护者:第一天他们会问,告诉他们他们所处的世界.问题的结束.我们不是在谈论语言功能.这是一个_platform_功能.对于evey .NET语言来说确实如此,并且永远都是如此.*想想*如果这种行为改变会发生什么!
John:维护者可以完全理解这个问题,但他们怎么知道编码器在他们没有初始化值时意味着获得默认值?也许它应该是默认值,但也许不是.毕竟,如果代码的一切都很完美,那么他们就不会维护它.
那真的不是重点吗?并非所有软件都是.NET?还是我生活在一个平行的宇宙中?
@John Saunders:嗯......并非所有项目都遵循关于测试的良好实践等.再次 - 我无法真正看到阻止清晰度的好处.如果你能想到一个案例,那么实际上将字段保持未初始化会更清楚,请通知我,我希望能够开悟.

2> John Saunder..:

假设平台以平台的工作方式运行,您始终是安全的..NET平台将所有字段初始化为默认值.如果您看到一个未被代码初始化的字段,则表示该字段由CLR初始化,而不是未初始化.

这种担忧对于不保证初始化但不保证初始化的平台有效.在.NET中,更经常表示开发人员的无知,认为初始化是必要的.


过去的另一个不必要的宿醉如下:

string foo = null;
foo = MethodCall();

我从那些应该知道更好的人那里看到了这一点.


在C#(可能是VB.NET)中,如果您尝试读取从未在代码中设置的变量,编译器将抛出错误.仅此一项就可以防止您描述的情况,因为变量必须始终在读取之前设置在某处,即使不在声明中也是如此.
(续)在明确声明的情况下,没有假设.我确切地知道前一个程序员想要的价值.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有