CamelCase中的首字母缩写

我对骆驼案有疑问。假设你有这样的首字母缩写:Unesco = United Nations Educational, Scientific and Cultural Organization.

你应该写:unitedNationsEducationalScientificAndCulturalOrganization

但是如果你需要写首字母缩写呢?喜欢的东西:

getUnescoProperties();

这样写对吗?__abc0或__abc1

134613 次浏览

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

当使用首字母缩略词时,长度超过两个字符的首字母缩略词应使用Pascal大小写或驼峰大小写。例如,使用HtmlButtonhtmlButton。但是,只由两个字符组成的首字母缩写词应该大写,例如System.IO而不是System.Io

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

总结:

  • 当你使用的缩写或首字母缩写只有两个字符长时,全部用大写;

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

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

从公认的答案中,有对微软的建议的合理批评。

  • 根据字符数对首字母缩写/首字母缩写的处理不一致:
  • playerID vs playerId vs playerIdentifier
  • 如果两个字母的首字母缩写出现在标识符的开头,是否仍然应该大写的问题:
  • USTaxes vs usTaxes
  • 区分多个首字母缩写的困难:
  • 例如,USID vs usId(或者在维基百科的例子中是parseDBMXML)。

所以我会把这个答案作为公认答案的替代。所有首字母缩略词应一致对待;首字母缩写词应该像对待其他单词一样对待。引用维基百科:

...有些程序员喜欢把缩写当作小写字母来对待。

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

但我认为我在这些例子中得出了不同的结论:

  • __abc0→__abc1
  • __abc0→__abc1

所以如果你认为两个字母的首字母缩写应该像其他首字母缩写一样对待,请投票给这个答案

Camel Case是一种约定,而不是规范。所以我猜民意决定一切。

(编辑:删除这个建议,投票应该决定这个问题;正如@Brian David所说;Stack Overflow不是一个“受欢迎程度竞赛”,这个问题以“基于意见”的方式结束。)

尽管许多人喜欢把首字母缩写词当作其他词来对待,但更常见的做法可能是将首字母缩写词全部大写(即使这会导致“令人憎恶”)。

其他资源:

  • 注意,有些人会区分缩写和首字母缩写
  • 注意:微软指南区分了两个字符的首字母缩略词,以及“超过两个字符的首字母缩略词”。
  • 注意,有些人建议完全避免使用缩写/首字母缩写
  • 注意,有些人建议完全避免使用camelCase / PascalCase
  • 注意有些人区分“一致性”和“一致性”;作为“内部似乎不一致的规则”;(即两个字符的首字母缩写与三个字符的首字母缩写区别对待);有些人把“一致性”定义为;作为“始终如一地应用同一规则”;(即使规则内部不一致)
  • 框架设计指南
  • 微软指南

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

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

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

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

这种惯例似乎很流行,但这只是惯例,没有对错之分。只要坚持约定,并确保你的名字是可读的。

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

如果可能,只遵循纯粹的camelCase,当你有首字母缩写时,尽可能让它们大写,否则就camelCase

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

如果有疑问,就去pure camelCase;)

parseXML很好,parseXml也是camelCase

XMLHTTPRequest应该是XmlHttpRequestxmlHttpRequest,后续的大写首字母缩写没有办法,这对所有测试用例都不清楚。

< p >。 你怎么读这个词HTTPSSLRequestHTTP + SSL,或HTTPS + SL(这没有任何意义,但…),在这种情况下,遵循驼背的惯例,去httpSslRequesthttpsSlRequest,也许它不再很好,但它肯定更清楚

UNESCO是一个特殊的例子,因为它通常(在英语中)被读成一个单词,而不是一个首字母缩略词——像UEFA, RADA, BAFTA,不像BBC, HTML, SSL

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

  1. 首字母缩写的大写形式:XMLHTTPRequestxmlHTTPRequestrequestIPAddress

  2. 驼色大小写缩写:ID[entifier]Exe[cutable]App[lication]

ID是一个例外,抱歉,但这是真的。

当我看到一个大写字母时,我认为这是一个首字母缩写,即每个字母对应一个单独的单词。缩写并不是每个字母都有单独的单词,所以我使用驼峰格。

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

要转换为CamelCase,还有谷歌的(近)确定性骆驼案例算法:

从名字的散文形式开始:

  1. 将短语转换为纯ASCII并删除所有撇号。 例如,“Müller's algorithm”可能变成“缪勒算法” 算法”。
  2. 将这个结果分成单词,拆分为on 空格和任何剩余的标点符号(通常是连字符)。< ol >
  3. 建议:如果任何单词已经有常规驼峰大小写 外观在常用的用法中,把它分成它的组成部分 (例如,“AdWords”变成“ad words”)。注意,一个词这样 因为“iOS”本身并不是驼色的;它无视任何 公约,所以这个建议不适用。李< / > < / ol > < /李>
  4. 现在所有字母都小写(包括首字母缩写),然后只大写 的第一个字符:
    1. …每一句话,都要让位上位 驼色箱,或
    2. …除了第一个字,每个字都要屈服
  5. 一个标识符。<李> / < / ol >

    请注意,原始单词的大小写几乎完全相同 忽视。< / p >

在以下示例中,“XMLHTTP request”正确地转换为XmlHttpRequest, XmlHttpRequest则不正确。

在github上有airbnb JavaScript风格指南,有很多星星(目前约57.5k)和关于首字母缩略词的指南,其中说:

首字母缩写和首字母缩写应该全部大写,或者全部大写 小写的。< / p >

为什么?名字是为了可读性,而不是为了取悦计算机算法。

// 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 = [
// ...
];

JavaScript Airbnb风格指南讲了一点这个。基本上:

// bad
const HttpRequests = [ req ];


// good
const httpRequests = [ req ];


// also good
const HTTPRequests = [ req ];

因为我通常在课堂上阅读大写字母的前导,所以我倾向于避免这样做。说到底,这都是个人偏好。

除了@valex所说的,我想用这个问题的答案来概括一些事情。

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

升C

微软写了提供了一些指导方针,在这种情况下,HtmlButton似乎是命名类的正确方式。

Javascript

Javascript有一些首字母缩写的全局变量,并且它们都是大写的(但有趣的是,并不总是一致),下面是一些例子:

< p > encodeURIComponent XMLHttpRequest toJSON toISOString < / p >

免责声明:英语不是我的母语。但是我已经考虑这个问题很长一段时间了,特别是当使用节点(驼峰风格)来处理数据库时,因为表字段的名称应该是蛇化的,这是我的想法:

对于程序员来说,有两种“首字母缩写”:

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

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

    在编程时,我们应该以首字母缩略形式或非首字母缩略形式命名变量。因此,如果我们将一个函数命名为getUNESCOProperties,这意味着UNESCO是一个首字母缩写(否则不应该全是大写字母),但显然,getproperties不是首字母缩写。我们应该给这个函数命名 不管是gunescop还是getUnitedNationsEducationalScientificAndCulturalOrganizationProperties,都是不可接受的
  1. 自然语言是不断进化的,并且 今天的首字母缩略词明天就会变成词汇,但程序应该独立于这种趋势,并永远存在。李< / p > < / >

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