CamelCase 中的首字母缩略词 [关闭]

Posted

技术标签:

【中文标题】CamelCase 中的首字母缩略词 [关闭]【英文标题】:Acronyms in CamelCase [closed] 【发布时间】:2013-03-09 16:45:54 【问题描述】:

我对 CamelCase 有疑问。假设你有这个缩写:Unesco = United Nations Educational, Scientific and Cultural Organization.

你应该写:unitedNationsEducationalScientificAndCulturalOrganization

但是如果您需要编写首字母缩写词怎么办?比如:

getUnescoProperties();

这样写对吗? getUnescoProperties()getUNESCOProperties();

【问题讨论】:

这不应该在programmers.SE上吗? IMO 转换为 snake_case 揭示了最佳解决方案。你喜欢get_unesco_properties还是get_u_n_e_s_c_o_properties 相关帖子 - Should the variable be named Id or ID? 相关问题:***.com/questions/4504508/camel-casing-acronyms 【参考方案1】:

从接受的答案中有对Microsoft advice 的合理批评。

根据字符数对首字母缩写词/首字母缩写词的处理不一致: playerID vs playerId vs playerIdentifier。 如果出现在标识符开头的两个字母首字母缩写词是否仍应大写的问题: USTaxesusTaxes 难以区分多个首字母缩略词: 即USID vs usId(或parseDBMXML 在***的例子中)。

因此,我将发布此答案作为已接受答案的替代方法。所有首字母缩略词都应一致处理;首字母缩略词应与任何其他词一样对待。 Quoting Wikipedia:

...一些程序员喜欢将缩写词视为小写单词...

所以回复:OP的问题,我同意接受的答案;这是正确的:getUnescoProperties()

但我想我会在这些例子中得出不同的结论:

US TaxesusTaxes Player IDplayerId

如果您认为应该将两个字母的首字母缩写词与其他首字母缩写词一样对待,请投票支持此答案

Camel Case 是一种约定,而不是规范。所以我猜流行的意见规则。

编辑:删除这个投票应该决定这个问题的建议;正如@Brian David 所说;Stack Overflow 不是“人气竞赛”,这个问题被关闭为“基于意见”)

尽管许多人喜欢将首字母缩略词视为任何其他词,但更常见的做法可能是将首字母缩略词全部大写(即使这会导致“可憎”)

见XML schema中的“EDXML” 请参阅此XBRL schema 中的“SFAS158”

其他资源:

请注意,有些人会区分缩写词和首字母缩略词 注意 Microsoft 指南区分两个字符的首字母缩写词和“长度超过两个字符的首字母缩写词” 请注意,有些人建议完全避免使用缩写词/首字母缩略词 请注意,有些人建议完全避免使用 CamelCase / PascalCase 请注意,有些人将“一致性”区分为“内部不一致的规则”(即处理两个字符的首字母缩写词与三字符的首字母缩写词不同);有些人将“一致性”定义为“始终如一地应用相同的规则”(即使规则内部不一致) Framework Design Guidelines Microsoft Guidelines

【讨论】:

1) 没有不一致。 “Id”是缩写,而不是首字母缩略词。 2) 它取决于标识符的上下文,即类、接口、属性、枚举类型、静态字段、参数、方法、属性或事件。如果标识符的准则是使用 PascalCase,那么它将是 USTaxesPlayerId;骆驼案:usTaxesplayerId。 3) 在 PascalCase 中是 USId,在 camelCase 中是 usId,在 camelCase 中是 parseDbmXml 你是对的,它是一个缩写。我的观点是它应该是 UsTaxes,UsId。两个字母的“缩写词或首字母缩略词”不应与三个字母或其他“普通词”区别对待。来自@Eonil 的回答的其他建议是完全避免使用缩短器。 unitedStatesTaxes 或 playerIdentifier。 哈哈。我怀疑会出现混乱——很多——但这些指导方针是防止可能出现的混乱的指导方针。科学上下文中人为的(错误的)首字母缩略词示例:InIN(item) vs InIn(item)(提示:IN 是英寸)。或者,IDById(id) vs IdById(id),上下文科学(提示:ID 表示传染性疾病)。 “两个字符长”——在什么情况下? Microsoft link "...对于首字母缩略词超过两个字符使用 Pascal 大小写或驼峰大小写。...但是,您应该大写包含以下内容的首字母缩略词只有两个字符...”这就是我所说的“不一致”的部分。更好的表征是“例外”。至少你已经合理化了为什么两个字母的首字母缩写词可能会更加混乱。但我猜那些带有“CanCan”的程序只是不走运。无论是舞蹈动作,还是 Cercle de l'Aviron de Nantes 的社区区域网络,都模棱两可:) Capital Offense: How to Handle Abbreviations in CamelCase 的作者在写道:“虽然 [使用大写首字母缩略词] 在简单的情况下有效,但当一个缩写跟随另一个缩写时,它会导致可憎:HTTPURLConnection, XMLIDREF "【参考方案2】:

免责声明:英语不是我的母语。但是这个问题我想了很久,尤其是在使用node(驼峰式)处理数据库时,因为表字段的名称应该是蛇形的,这是我的想法:

程序员有两种“首字母缩写词”:

自然语言,联合国教科文组织 在计算机编程语言中,例如tmc and textMessageContainer,通常显示为局部变量。

在编程世界中,自然语言中的所有首字母缩写词都应该被视为单词,原因是:

    当我们编程时,我们应该以首字母缩写形式或非首字母缩写形式命名一个变量。因此,如果我们将函数命名为 getUNESCOProperties,则意味着 UNESCO 是首字母缩略词(否则不应全部为大写字母),但显然 getproperties 不是首字母缩略词。所以,我们应该命名这个函数 gunescopgetUnitedNationsEducationalScientificAndCulturalOrganizationProperties,两者都是不可接受的。

    自然语言在不断发展,并且 today's acronyms will become words tommorow,但是程序应该独立于这种趋势并且永远存在。

顺便说一句,在投票最多的答案中,IO 是计算机语言含义中的首字母缩写词(代表 InputOutput),但我不喜欢这个名字,因为我认为首字母缩写词(计算机语言中的)应该只是用于命名一个局部变量,但是一个***的类/函数,所以应该使用 InputOutput 而不是 IO

【讨论】:

“舌头”,而不是“音调”【参考方案3】:

除了@valex 所说的,我想用给定的答案来回顾一下这个问题。

我认为一般的答案是:这取决于您使用的编程语言。

升C

Microsoft has written 一些指导方针,似乎htmlButton 是为这种情况命名类的正确方法。

javascript

Javascript 有一些带有首字母缩略词的全局变量,并且它们都以大写形式使用(但有趣的是,并不总是一致)这里有一些示例:

encodeURIComponent XMLHttpRequest toJSON toISOString

【讨论】:

嗯,它是 Netscape 的老版本,它甚至有一些没有像 onerror 这样的驼峰式命名法。 我认为您需要第三类项目:首字母缩写词、缩写词和文件扩展名。【参考方案4】:

JavaScript Airbnb 风格指南talks a bit about this。基本上:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

因为我通常在课堂上阅读前导大写字母,所以我倾向于避免这种情况。归根结底,这都是偏好。

【讨论】:

【参考方案5】:

getUnescoProperties() 应该是最好的解决方案...

如果可能,请使用纯 camelCase,如果您有首字母缩写词,请尽可能将其大写,否则请使用 camelCase

一般在 OO 编程中,变量应以小写字母 (lowerCamelCase) 开头,类应以大写字母 (UpperCamelCase) 开头。

如果有疑问,就去纯粹的camelCase ;)

parseXML 可以,parseXml 也是camelCase

XMLHTTPRequest 应该是 XmlHttpRequestxmlHttpRequest 没有办法使用后续的大写首字母缩写词,对于所有测试用例来说肯定都不清楚。

例如 你怎么读这个词HTTPSSLRequestHTTP + SSL,或HTTPS + SL(这并不意味着......),在这种情况下遵循骆驼大小写约定并去httpSslRequesthttpsSlRequest,也许已经不好看了,但肯定更清晰了。

【讨论】:

我喜欢你的 HTTPSSL 例子,虽然 SL 没有任何意义,那么 HTTPSSHTunnel 之类的呢?是 HTTPS + SH(shell)还是 HTTP + SSH?谷歌约定绝对不那么模棱两可。【参考方案6】:

在 github 上有 airbnb JavaScript Style Guide 有很多星星(目前约为 57.5k)和关于 acronyms 的指南说:

首字母缩写词和首字母缩写词应始终全部大写,或全部大写 小写。

为什么?名称是为了便于阅读,而不是为了安抚计算机算法。

// bad
import SmsContainer from './containers/SmsContainer';

// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];

【讨论】:

为什么?名称是为了可读性,而不是为了安抚计算机算法”所以,XMLHTTPRequestXmlHttpRequest 更易读,对吧? 为什么 httpRequests 被认为是好的但 HttpRequests 是坏的,这没有意义。那么遵循这个原则,对于 XML HTTP Request 应该是xmlhttpRequest??? 我经常引用 AirBnb 风格指南,但在这种情况下我不同意。我特别不同意他们的说法:“首字母缩写词和首字母缩写词应始终全部大写或全部小写。”。在我看来,xmlHttpRequestXMLHTTPRequest 更具可读性。 “LASER”、“RADAR”、“SCUBA”你怎么看?它们是首字母缩略词,但现在被广泛认为是普通词。 当你使用大写的首字母缩写词时,你基本上把它自己变成了一个词,我认为这是不对的。首字母缩略词应全部大写或小写。【参考方案7】:

要转换成CamelCase,还有Google's (nearly) deterministic Camel case algorithm:

以姓名的散文形式开头:

    将短语转换为纯 ASCII 并删除所有撇号。 例如,“Müller 算法”可能会变成“Muellers 算法”。 把这个结果分成单词,在 空格和任何剩余的标点符号(通常是连字符)。
      推荐:如果任何单词已经有常规的驼峰格 外观常用,将其拆分为其组成部分 (例如,“AdWords”变成“广告词”)。请注意,这样的词 因为“ios”本身并不是真正的骆驼案例;它无视任何 约定,因此此建议不适用。
    现在全部小写(包括首字母缩写词),然后只大写 第一个字符:
      …每个单词,产生上 驼峰式,或 …除第一个单词外的每个单词,以产生 小驼峰式
    最后把所有的词加入 单个标识符。

请注意,原始单词的大小写几乎完全是 无视。

在以下示例中,“XML HTTP 请求”正确转换为 XmlHttpRequest,XMLHTTPRequest 不正确。

【讨论】:

【参考方案8】:

目前我正在使用以下规则:

    首字母大写:XMLHTTPRequestxmlHTTPRequestrequestIPAddress

    驼峰式缩写:ID[entifier]Exe[cutable]App[lication]

ID 是个例外,对不起,但确实如此。

当我看到一个大写字母时,我假设一个首字母缩略词,即每个字母都有一个单独的词。每个字母的缩写没有单独的单词,所以我使用驼峰式。

XMLHTTPRequest 是模棱两可的,但它是一种罕见的情况,并没有那么模棱两可,所以没关系,规则和逻辑比美观更重要。

【讨论】:

【参考方案9】:

UNESCO 是一个特例,因为它通常(在英语中)被解读为一个单词而不是首字母缩略词 - 像 UEFA、RADA、BAFTA 和 BBC、HTML、SSL 不同

【讨论】:

这是“首字母缩略词”和单纯的“缩写”的区别;这种区别似乎与整个讨论有关,但在给出的答案中几乎完全被忽略了。 BBC、HTML、SSL 和其他您能读出每个字母的首字母缩略词更准确地称为首字母缩写词。像 UNESCO 这样发音为一个词的词是真正的首字母缩略词。【参考方案10】:

还有另一种驼峰式约定,它试图通过使用大写字母 (HTML) 或小写字母 (html) 来提高首字母缩写词的可读性,但避免同时使用两者 (Html)。

所以在你的情况下你可以写getUNESCOProperties。您也可以为变量写unescoProperties,或为类写UNESCOProperties(类的约定是以大写开头)。

如果您想将两个首字母缩略词放在一起,例如对于名为 XML HTTP Request 的类,此规则会变得很棘手。它会以大写开头,但由于 XMLHTTPRequest 不容易阅读(它是 XMLH TTP 请求吗?),而 XMLhttpRequest 会打破驼峰式约定(它是 XM Lhttp 请求吗?),最好的选择是混合大小写:XMLHttpRequest,实际上就是W3C used。但是,不鼓励使用这种命名。对于此示例,HTTPRequest 将是一个更好的名称。

由于标识/身份的官方英文单词似乎是 ID,虽然不是首字母缩略词,但您可以在那里应用相同的规则。

这个约定似乎很流行,但它只是一个约定,没有对错之分。只需尝试遵守约定并确保您的名字可读。

【讨论】:

我不相信这整个线程 :-) 所以它会是 XMLToHtmlConverter 但 HTMLToXmlConverter?哇... @JosefSábl,是的,就是这样。关于你的反对意见,我并不是说我喜欢这个约定,但它确实存在。 我把这个问题读作“在驼峰式中写首字母缩写词的好习惯是什么”而不是“你能列出所有存在的约定吗”。由于我认为您提到的约定非常糟糕,因此我投了反对票:-) 那么问题是“这样写对吗?”,因为有很多“正确”的写法,因为它只是一个约定,而且这个约定很流行(不管关于您如何考虑),我的回答非常有效:-)【参考方案11】:

一些guidelines微软写过关于camelCase是:

使用首字母缩略词时,对于长度超过两个字符的首字母缩略词,请使用 Pascal 大小写或驼峰大小写。例如,使用HtmlButtonhtmlButton。但是,您应该将仅包含两个字符的首字母缩略词大写,例如 System.IO 而不是 System.Io

不要在标识符或参数名称中使用缩写。如果您必须使用缩写,请对包含两个以上字符的缩写使用驼峰式大小写,即使这与单词的标准缩写相矛盾。

总结:

当您使用两个字符长的缩写或首字母缩略词时,请将它们全部大写;

当首字母缩写词超过两个字符时,第一个字符使用大写。

因此,在您的具体情况下,getUnescoProperties() 是正确的。

【讨论】:

技术上“ID”不是首字母缩写词(它是“identifier”或“identification”的缩写),但我真的不知道该指南如何/是否有助于该指南。 :-\ 我认为这不是一个好的标准。区分普通首字母缩写词、两个字母的首字母缩写词和普通单词似乎过于复杂,并且与具有一致命名约定的想法背道而驰。 另外,被微软声明的东西并不“正确”。 很高兴知道他们遵循自己的准则:XMLHttpRequest() 最初来自 Microsoft。 @Yar,我是在讽刺。我应该通过笑脸更清楚我的意图:-)。

以上是关于CamelCase 中的首字母缩略词 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何处理类名中的首字母缩略词? [复制]

FxCop:CA1709:使用 Resharper 中的首字母缩略词字典

在 slug url 中为 seo 使用单词的首字母缩略词是一种好习惯吗?

你如何 PEP 8 命名一个名称是首字母缩略词的类?

VBA Word 从 Excel 中查找和替换 /&-

如何获得中文的首字母?