319

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

你应该写:unitedNationsEducationalScientificAndCulturalOrganization

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

getUnescoProperties();

这样写合适吗?getUnescoProperties()或者getUNESCOProperties();

4

11 回答 11

388

已接受的答案对Microsoft 的建议提出了合理的批评。

  • 根据字符数对首字母缩写词/首字母缩写词的处理不一致:
    • playerID对比playerId对比playerIdentifier_
  • 如果两个字母的首字母缩写词出现在标识符的开头,它们是否仍应大写的问题:
    • USTaxes对比usTaxes
  • 难以区分多个首字母缩略词:
    • USIDvs usId(或parseDBMXML在维基百科的示例中)。

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

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

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

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

  • US TaxesusTaxes
  • Player IDplayerId

因此,如果您认为两个字母的首字母缩略词应该像其他首字母缩略词一样对待,请投票给这个答案.

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

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

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

其他资源:

  • 注意有些人区分缩写和首字母缩略词
  • 注意 Microsoft 指南区分两个字符的首字母缩写词和“长度超过两个字符的首字母缩写词”
  • 请注意,有些人建议完全避免使用缩写词/首字母缩略词
  • 注意有些人建议完全避免 CamelCase / PascalCase
  • 请注意,有些人将“一致性”区分为“内部不一致的规则”(即处理两个字符的首字母缩写词与三个字符的首字母缩写词不同);有些人将“一致性”定义为“一致地应用相同的规则”(即使规则内部不一致)
  • 框架设计指南
  • 微软指南
于 2014-11-27T13:36:40.783 回答
255

微软编写的一些指导方针camelCase是:

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

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

加起来:

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

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

所以,在你的具体情况下,getUnescoProperties()是正确的。

于 2013-03-20T14:35:14.540 回答
29

要转换为 CamelCase,还有Google 的(几乎)确定性 Camel 案例算法

从名字的散文形式开始:

  1. 将短语转换为纯 ASCII 并删除任何撇号。例如,“Müller 算法”可能会变成“Muellers 算法”。
  2. 将此结果划分为单词、空格和任何剩余的标点符号(通常是连字符)。
    1. 推荐:如果任何单词在常用用法中已经具有常规的驼峰式外观,请将其拆分为其组成部分(例如,“AdWords”变为“广告词”)。请注意,诸如“iOS”之类的词本身并不是真正的驼峰式;它违反了任何惯例,因此该建议不适用。
  3. 现在小写所有内容(包括首字母缩写词),然后只大写以下字符的第一个字符:
    1. …每个单词,产生大写驼峰式,或
    2. …除第一个单词外的每个单词,以产生小驼峰式大小写
  4. 最后,将所有单词连接成一个标识符。

请注意,原始单词的大小写几乎完全被忽略。

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

于 2017-08-01T14:38:23.370 回答
23

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

如果可能的话就用纯camelCase字母,当你有首字母缩写词时,如果可能的话就让它们大写,否则就不用了camelCase

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

如有疑问,请纯洁camelCase;)

parseXMLparseXml可以camelCase

XMLHTTPRequest应该XmlHttpRequestxmlHttpRequest没有办法使用随后的大写首字母缩略词,对于所有测试用例来说,它肯定是不明确的。

例如,你怎么读这个词HTTPSSLRequest, HTTP + SSL, or HTTPS + SL(这并不意味着...),在这种情况下遵循骆驼大小写约定并使用httpSslRequestor httpsSlRequest,也许它不再好,但它肯定更清楚。

于 2016-06-28T08:28:54.877 回答
14

github 上有airbnb JavaScript 样式指南,其中有很多星星(目前约为 57.5k),并提供有关首字母缩略词的指南:

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

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

// 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 = [
  // ...
];
于 2017-08-24T11:11:59.337 回答
5

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

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

C夏普

Microsoft已经编写了一些指导方针,似乎这HtmlButton是为这种情况命名类的正确方法。

Javascript

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

encodeURIComponent XMLHttpRequest toJSON toISOString

于 2018-03-16T18:21:18.857 回答
2

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

  1. 首字母缩略词大写:XMLHTTPRequest, xmlHTTPRequest, requestIPAddress.

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

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

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

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

于 2017-07-12T20:05:01.340 回答
1

JavaScript Airbnb 样式指南对此进行了一些讨论。基本上:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

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

于 2018-02-01T23:49:23.920 回答
1

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

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

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

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

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

  2. 自然语言在不断发展, 今天的缩略词明天就会变成单词,但程序应该独立于这种趋势,永远屹立不倒。

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

于 2018-05-23T07:00:47.293 回答
0

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

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

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

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

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

于 2016-05-12T14:10:36.547 回答
0

联合国教科文组织是一个特例,因为它通常(用英语)读成一个单词而不是首字母缩略词 - 像 UEFA、RADA、BAFTA 和 BBC、HTML、SSL 不同

于 2016-07-16T18:36:32.210 回答