【问题标题】:Java Naming Convention with Acronyms [closed]带有首字母缩略词的 Java 命名约定 [关闭]
【发布时间】:2011-01-15 06:15:24
【问题描述】:

以下 Java 类的正确名称是什么: DVDPlayerDvdPlayer?

【问题讨论】:

  • 我讨厌缩写词。 DigitalVersatileDiscPlayer 是前进的方向。
  • +1 给汤姆开玩笑。如果“正确”被重新解释为“标准”或“最典型”,我确实发现这个问题很有帮助。接受的答案很棒!
  • 对我来说,将这些首字母缩略词视为一个单词是有意义的,因此我遵循convention 并使用DvdPlayer
  • The style guide 对此有以下说法:“如果缩写是较长类名的一部分,则将其格式化为单词。”,所以DvdPlayer是要走的路。 (而且,对于 Tom,“使用整个单词并避免使用缩写,除非缩写比长格式更广泛使用。”,我认为“DVD”比“数字多功能光盘”使用更广泛" :-)
  • 您的意思肯定是“铁饼”,不是吗? :)

标签: java naming-conventions


【解决方案1】:

由于看起来答案是 Java 中没有针对此的单一标准,我想指出 .NET Framework 设计指南确实指定了这一点。

现在在抨击我跑题之前,请记住 Java 和 .NET Framework 的类命名准则非常相似,这使得 .NET 准则可用作有说服力的参考。

一般规则

这两个指南都建议仅在首字母缩略词广为人知且易于理解时才使用首字母缩略词。 DVD 或 XML 就是很好的例子,虽然您可以立即识别它们,但识别扩展版本需要更长的时间。

缩写

.NET Framework 指南建议不要使用缩写词(与首字母缩写词相反),但标识符中可能会使用两个常见的缩写词IDOK。使用缩写时,始终使用混合大小写 Id,除了驼峰式标识符(与 PascalCase 标识符相反)的第一个单词。

在 Java 中,仅在某些时候遵循此约定。 Take a look getIDgetId 在 JCL 中的混合程度。 (向下滚动该页面的中途)。不过,在Java 8 version 中,getId 的使用越来越多,这暗示 PascalCase 约定现在是首选。最好尽可能避免使用缩写词。

缩写词

.NET Framework 指南规定,IO 等两个字母的首字母缩略词应该具有相同的大小写。因此,对于 PascalCase 标识符(如类名),您会得到 DBRate,而对于 camelCase 标识符(如局部变量),您可能会得到 ioChannel

这似乎也是 Java 中的主流约定。

长首字母缩略词

.NET Framework 指南建议三个字母或更长字母的首字母缩写词对 PascalCase 和 camelCase 标识符使用混合大小写,camelCase 标识符的第一个单词除外。因此,对于一个类名,您可能有XmlDocument,而一个局部变量可能被命名为httpRequest

Java 中并不总是遵循此约定。四个字符的首字母缩写词似乎通常使用大小写混合,但即使是 JCL 也对三个字母的首字母缩写词不一致。大多数似乎都是大写的,比如URLXMLSQLDOM,但也有一些例外,比如Jar

结论

对于 Java:

对于 4 个以上字母的首字母缩写词,请使用大小写混合。标准库就是这样做的,而且很有意义。

对于 3 个字母的首字母缩写词,您可以像 JCL 一样使用全部大写,也可以像 .NET Framework 那样使用混合大小写。无论哪种方式,都要保持一致。

对于 2 个字母的首字母缩写词,请全部使用大写。

对于 2 个字母的缩写,Java 并没有真正的标准,但我建议使用混合大小写,除非与其他名称保持一致会使所有大写看起来更好。

【讨论】:

  • 说得好,辛苦了!
  • 我喜欢这个,除了 3 和 2 字母首字母缩写词的 CAPS 不一致。 (也许我是一个纯粹主义者,但出于实际原因,请参阅公认的答案。另外,还有混淆因素。)
  • @JCoombs:嗯,两个字母的不一致就像IpAddress 这样对很多人来说看起来很糟糕。就个人而言,当我需要编写 Java 代码时,我会为 3 个字母的首字母缩写词混合大小写,只留下两个字母作为特殊情况。
  • 如果你的类名有多个相邻的两个字母的首字母缩写词怎么办?不管你做什么,它看起来都是“错误的”——USGFCharset、UsGfCharset、US_GFCharset...
  • 非常好的答案。但就我个人而言,我不喜欢 .NET 指南中根据首字母缩写词的长度以及它是否是缩写词而进行不同命名的想法。谁真正关心并检查首字母缩写词的长度?或者如果它是一个缩写?我更喜欢命名的一揽子规则。当使用具有与您选择的任何规则不同的约定的 3rd 方库时,就会出现问题。
【解决方案2】:

没有“正确”的答案。只是一组可以更好地与您的其他工具配合使用的做法和约定。

因此我更喜欢DvdPlayer。它更有帮助,因为在 Eclipse 中,您可以执行 Ctrl+Shift+T 并按每个单词的第一个字母选择类别。

【讨论】:

  • oooo 这是一个有用的 Eclipse 技巧。谢谢!
  • (+1) 一个很好的提示。这为我回答了这个问题:-)
  • 只需“SIO”即可找到该类。
  • 这也适用于 Eclipse 的其他地方——例如自动完成。有一个名为“myDvdCoverImage”的方法/变量吗? - 只需输入 mDCI Ctrl+Space
  • 还有一些快捷键已经设置好了,比如 sysout Ctrl+Space,给你 System.out.println。 (try) 和 (for) 也是如此
【解决方案3】:

我已经看到它们都在野外使用过,Sun 似乎更喜欢DVDPlayer 风格。不过,我更喜欢DvdPlayer,因为这样即使有多个连续的首字母缩写词,单词边界在哪里也很清楚,例如HTTPURLConnection

【讨论】:

  • 这样打字也比较快。
  • 我认为“DVDPlayer”让这个词的界限更加清晰。 “Dvd”不是一个词,而“DVD”是“Digital Versatile Disc”的首字母缩写。所以“DVD Player”中的实际单词边界是“D”、“V”、“D”和“P”。
  • @GregBrown:DVD 是一张有孔的光盘,除了你之外没有人知道它的全名,也不在乎它。而且使用 DvdPlayer 更加实用。
  • @GregBrown:事实上,至少在 Eclipse 中它更实用,其中驼峰式识别是首字母缩写词的痛苦:即使用 DvdPlayer,您可以键入“DP”并按 Ctrl+1 来获取选择 DvdPlayer,但如果您有 DVDPlayer,则必须键入“DVDP”。如果它更长,那就更烦人了。我不想在我的代码中有 UNESCOConnector。无论如何,这是一个选择问题。
  • 另一个很好的例子是HTTPSID——我是指HTTP SID还是HTTPS ID...所以应该分别写成HttpSid或者HttpsId来更好的解释含义。
【解决方案4】:

我喜欢用以下方式定义类的各个实例:

Catalogue catalogue;
Person person;

因此,如果我使用DVDPlayer,我会称其为什么实例? dVDPlayer?因此,我会选择 DvdPlayer 类名,这样您就可以将实例命名为 dvdPlayer

【讨论】:

  • DVDPlayer dvdPlayer; 有什么问题?
  • @DerFlatulator 它有什么问题?不管你怎么来dvdPlayer,当你回去的时候,你会得到DvdPlayer
  • @DerFlatulator:从 UpperCamelCase 转换为 lowerCamelCase 时的自动化问题:我在将 Hibernate 映射到蛇形大小写时遇到了问题:DvdPlayer -> dvd_playerDVDPlayer -> d_v_d_player。无法将 DVDPlayer 自动转换为 dvd_player。
  • @DerFlatulator:好的,感谢您的回复,它在这种情况下有效。但我仍然对“DvdPlayer”表示法深信不疑:DVDRPGPlayer 呢?它应该转换为 dvdRpgPlayer,而不是 dvdrpgPlayer。
  • 还要考虑你的 getter 和 setter:getDvdPlayer()getDVDPlayer() 工作得更好,例如,当与 JSP EL 一起使用时(例如,foo.dvdPlayer)。如果您在首字母缩略词中使用小写字母命名 getter,最好保持类名相同以保持一致性和可预测性。
【解决方案5】:

来自 JavaSE 类、apache commons 和 spring 的一些示例:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

所以 - 这并不重要。

【讨论】:

  • 同意。只需在您的代码库中保持一致即可。
  • 我不会说没关系,尽管这并不是什么大问题。一些用户发现普遍首选的标准非常有用,即使并非所有人都一致遵循这些标准。
  • 我应该更喜欢SRS 而不是SoftwareRequirementSpecification 吗?
【解决方案6】:

Effective Java 似乎更喜欢 DvdPlayer。

【讨论】:

    【解决方案7】:

    正如其他人所指出的,它是一种因项目而异的风格。 Guava 和 GWT 等 Google 项目更喜欢 DvdPlayer 样式。

    https://google.github.io/styleguide/javaguide.html#s5.3-camel-case

    【讨论】:

    【解决方案8】:

    来自sun java docs

    类名应该是名词,大小写混合,每个内部单词的首字母大写。尽量保持你的类名简单和描述性。使用完整的单词,避免使用首字母缩写词和缩写词(除非缩写词比长格式更广泛地使用,例如 URL 或 HTML)。

    【讨论】:

    • 这并没有真正说明它应该是大写还是驼峰。
    • @DD。我认为,“更广泛使用”指的是对相关首字母缩略词(HTTP、GET 等)使用全大写,而不是一些随机的特定于业务的词,如 DVD、MRI、MAGA 等。
    【解决方案9】:

    DVDPlayer 是标准,但DvdPlayer 并不少见。

    你经常看到getId。这可能是因为认为 ID 是“身份”的缩写。其实就是身份证的首字母。

    HttpURLConnection 通常作为混合约定的示例给出。但是,在 URL 中用作协议名称的“http”应该小写(尽管通常接受大写)。

    【讨论】:

    • 我不认为这是一个真正的标准,但它可能是最常见的。
    • 它在 Sun Java 编码标准 IIRC 中。虽然不在 JLS 中。
    • 超文本传输​​协议UniformResourceLocatorConnection
    • 我很确定大多数人使用 ID 作为标识符的缩写...即在数据库中,表 ID 是指身份文件的表标识符。
    • DVDPlayer 绝对不是标准;甚至 JDK 在他们的处理方法上也非常不一致。
    【解决方案10】:

    这里没有“正确”,只有偏好。

    Sun 在命名包含“URL”和“HTML”的类的方式上是一致的,但我在 javadocs 中看到 HTTP 使用全部大写和驼峰式大小写。

    就个人而言,我更喜欢 DvdPlayer。

    【讨论】:

    • 我认为 URL 中的 HTTP 协议名称应该小写(尽管浏览器可能接受大写)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多