Android 私有字段命名准则可以吗?
Posted
技术标签:
【中文标题】Android 私有字段命名准则可以吗?【英文标题】:Android private fields naming guidelines are ok? 【发布时间】:2011-01-09 03:03:59 【问题描述】:这里http://source.android.com/source/code-style.html#follow-field-naming-conventions声明:
字段名称
非公开、非静态字段名称以 m 开头。 静态字段名称以 s 开头。 其他字段以小写字母开头。 公共静态最终字段(常量)为 ALL_CAPS_WITH_UNDERSCORES。
它还指出:
以下规则不是指南或建议,而是严格的规则。除非在需要使用的基础上获得批准,否则您不得忽视我们在下面列出的规则。
我不喜欢在类中的私有或包字段之前使用“m”约定。我真的觉得这没有灵感……我的意思是,如果我们尝试应用好的设计,类的低耦合意味着公共领域很少。实际上,在我的程序中,我通常没有公共字段,即使我需要一些公共字段,我也会使用 getter 和 setter...
那么,为什么要强迫我在程序中几乎所有的字段前面都加上一个“m”呢?拥有几个公共领域(如果有的话)会不会更容易,前面有一些“g”之类的?或者只是像bean建议的那样使用setter和getter? 这真的让我的代码更难阅读......
此外,遵循这些准则,方法中使用的局部临时变量没有限制,因此它们很容易被误认为是公共全局字段(也没有限制)......我也发现这也是错误的,因为它很可能错误的来源... 我知道有一种与字段区分开来的方法,但是私有/受保护的成员字段是应用程序中最常用的,它们的“可读性”不应该降低。
你怎么看?我应该遵守指南吗?
【问题讨论】:
经常强制使用此类前缀的原因之一是防止隐藏成员字段。例如,如果您没有任何前缀,您通常有一个构造函数或 setter 方法的参数,该参数与成员字段同名。在这种情况下,您必须使用“this”访问成员字段。每当它被隐藏时,它就在它面前。程序员偶尔会忘记“this.”,这会导致错误。公共字段上的前缀没有那么有用,因为无论如何都不需要在公共字段上设置 setter。 我实际上更喜欢私有字段上的 m_ 前缀,因为它使您的类方法更易于阅读。之所以使用这些约定,是因为阅读的代码多于编写的代码...我认为那是在 Code Complete somwhere 中?... 我同意你的看法。我不喜欢“m”约定,我很高兴不使用它 【参考方案1】:这些编码指南适用于作为核心 Android 平台的 Android 开源项目。如果您希望任何代码被核心平台接受,则必须遵循这些准则。您可以在自己的应用程序中做任何您想做的事情。 关于指南本身,我认为它们非常合理,并且与商业应用中使用的许多标准相似。通常,您希望使用 getter 和 setter 进行公共字段访问,并且您不希望拥有全局公共变量。只有全局公共常量是可以的。 所以简短的回答是关注他们的开源项目,决定在你的应用程序中关注他们。
【讨论】:
【参考方案2】:关于 getter\setter,实际上建议不要在 Android 中使用它们。
我在“为性能而设计”页面上找到了这个(部分:Avoid Internal Getters/Setters):http://developer.android.com/guide/practices/design/performance.html
归根结底,他们推断实例字段查找比虚拟方法调用更有效(由于 JIT 中的优化)。
我想我会继续在我的代码中使用 getter\setter,但这可能是一种提高性能的简单方法(尤其是对于执行大量数据操作的应用)。
【讨论】:
您必须使用 setter/getter 来访问另一个类的对象的私有字段。但是,您应该在内部限制使用这些方法。在内部,为什么要使用'name = getName()',直接访问变量更有效(name = mName)以上是关于Android 私有字段命名准则可以吗?的主要内容,如果未能解决你的问题,请参考以下文章