缩略语CamelCase

时间:2013-03-20 14:18:11

标签: coding-style camelcasing acronym

我对CamelCase有疑问。你有这个首字母缩略词:Unesco = United Nations Educational, Scientific and Cultural Organization.

你应该写:unitedNationsEducationalScientificAndCulturalOrganization

但是如果你需要写首字母缩略词怎么办?类似的东西:

getUnescoProperties();

以这种方式写它是对的吗? getUnescoProperties() OR getUNESCOProperties();

12 个答案:

答案 0 :(得分:263)

从接受的答案中对Microsoft advice提出了合理的批评。

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

所以我会发布这个答案作为接受答案的替代方案。投票可以决定。所有首字母缩略词都应该得到一致的处理;首字母缩略词应该像任何其他词一样对待。 Quoting Wikipedia

  

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

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

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

  • US TaxesusTaxes
  • Player IDplayerId

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

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

在搜索现有代码或标记中的“流行”答案时,可能接受的答案是正确的。

答案 1 :(得分:156)

微软撰写的一些guidelinescamelCase

  

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

     

请勿在标识符或参数名称中使用缩写。如果必须使用缩写,请将camel case用于包含两个以上字符的缩写,即使这与单词的标准缩写相矛盾。

总结:

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

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

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

答案 2 :(得分:19)

首先,我必须澄清我不是母语为英语的人,所以我对英语语法的主张可能是错误的。如果您发现此类错误,请告诉我,我将非常感谢。


首字母缩略词的最佳做法是尽可能避免使用首字母缩略词。 无论如何,情况并非如此,因为首字母缩略词UNESCO比全名UnitedNationsEducationalScientificAndCulturalOrganization更为熟悉。

然后,我认为UNESCOUnesco更有意义,因为它更接近真实生活形式,因此更加熟悉。我很难弄明白Unesco这个词究竟意味着什么。

作为另一个例子,请考虑Arc。这听起来像是围绕圆圈的曲线,但在Rust中,这意味着Atomically Reference Counted。如果它被写成ARC,至少读者会认识到这个词是其他东西的首字母缩写,而不是一种曲线。

现代程序主要是为人类读者编写的。然后必须为人类可读性而不是机器处理或分析设置这些命名规则。

从这个角度来看,我们使用Unesco而不是UNESCO而失去了一些可读性。

对于任何其他情况,我认为只需关注plain English acronym rules (or conventions)就足以满足最佳可读性的大多数情况。

答案 3 :(得分:14)

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

如果可能的话,只需按照纯camelCase进行操作即可,如果有缩写词,请尽可能将它们放在大写字母上,否则请转到camelCase

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

如有疑问,请转为纯camelCase;)

parseXML没问题,parseXml也是camelCase

XMLHTTPRequest应该是XmlHttpRequestxmlHttpRequest无法使用后续的大写缩略语,对于所有测试用例来说,它绝对不明确。

e.g。 你如何阅读这个单词HTTPSSLRequestHTTP + SSLHTTPS + SL(除了......之外没有任何意义),在这种情况下遵循骆驼案例惯例并转到{{1或者httpSslRequest,也许它不再好看,但它肯定更清晰。

答案 4 :(得分:11)

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

  

从名称的散文形式开始:

     
  1. 将短语转换为纯ASCII并删除任何撇号。   例如,“Müller的算法”可能会成为“Muellers”   算法“。
  2. 将此结果划分为单词,拆分为   空格和任何剩余的标点符号(通常为连字符)。
        
    1. 推荐:如果任何单词已经有传统的骆驼案例   通常使用的外观,将其分解为其组成部分   (例如,“AdWords”变为“广告词”)。注意这样的一个词   因为“iOS”本身并不是骆驼本身;它无视任何   惯例,因此该建议不适用。
  3.   
  4. 现在小写所有内容(包括首字母缩略词),然后仅大写   第一个字符:
    1. ...每个单词,以产生上层   骆驼案,或
    2. ......除了第一个之外的每个词,都要屈服   较低的驼峰案例
  5. 最后,将所有单词加入   一个标识符。
     

请注意,原始单词的外壳几乎完全是   忽略。

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

答案 5 :(得分: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 = [
  // ...
];

答案 6 :(得分:3)

目前我使用以下规则:

  1. 首字母缩略词的首要案例:XMLHTTPRequestxmlHTTPRequestrequestIPAddress

  2. 骆驼案例缩写:ID[entifier]Exe[cutable]App[lication]

  3. ID是一个例外,抱歉,但确实如此。

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

    XMLHTTPRequest很暧昧,但这是一种罕见的情况,并没有那么模糊,所以没关系,规则和逻辑比美丽更重要。

答案 7 :(得分:1)

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

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

因为我通常会把一个主要的大写字母作为一个类来读,所以我倾向于避免这种情况。在一天结束时,这是所有的偏好。

答案 8 :(得分:0)

还有另一种camelcase约定,它试图通过使用大写(HTML)或小写(html)来支持首字母缩略词的可读性,但同时避免使用(Html)。< / p>

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

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

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

这个惯例似乎很受欢迎,但它只是一个惯例,没有对错。只是尝试坚持一个约定,并确保您的名字是可读的。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

除了@valex所说的内容之外,我还想回顾一下这个问题的答案。

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

C Sharp

Microsoft this一些指导原则似乎HtmlButton是为此案例命名类的正确方法。

的Javascript

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

encodeURIComponent XMLHttpRequest toJSON toISOString

答案 11 :(得分:0)

免责声明:英语不是我母亲的语气。但是我很长一段时间都在考虑这个问题,尤其是在使用node(camelcase样式)来处理数据库时,因为表字段的名称应该被蛇化,这是我的想法:

有两种&#39;首字母缩略词&#39;对程序员来说:

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

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

  1. 编程时,我们应该用缩写样式或非首字母缩略词样式命名变量。因此,如果我们将函数命名为getUNESCOProperties,则意味着联合国教科文组织是一个缩写词(否则它不应该全部是大写字母),但显然,getproperties不是首字母缩写词。所以,我们应该命名这个功能 gunescop getUnitedNationsEientificScientificAndCulturalOrganizationProperties ,两者都是不可接受的。

  2. 自然语言不断发展,并且 today's acronyms will become words tommorow,但计划应独立于这一趋势并永远站立。

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