我对CamelCase有疑问。你有这个首字母缩略词:Unesco = United Nations Educational, Scientific and Cultural Organization.
你应该写:unitedNationsEducationalScientificAndCulturalOrganization
但是如果你需要写首字母缩略词怎么办?类似的东西:
getUnescoProperties();
以这种方式写它是对的吗? getUnescoProperties() OR getUNESCOProperties();
答案 0 :(得分:263)
从接受的答案中对Microsoft advice提出了合理的批评。
playerID
vs playerId
vs playerIdentifier
。USTaxes
vs usTaxes
USID
vs usId
(或维基百科示例中的parseDBMXML
)。所以我会发布这个答案作为接受答案的替代方案。投票可以决定。所有首字母缩略词都应该得到一致的处理;首字母缩略词应该像任何其他词一样对待。 Quoting Wikipedia:
......一些程序员喜欢将缩写视为小写单词......
所以我说:OP的问题,我同意接受的答案;这是正确的:getUnescoProperties()
但我想我会在这些例子中得出不同的结论:
US Taxes
→usTaxes
Player ID
→playerId
如果您认为两个字母的首字母缩略词应该像其他首字母缩略词一样对待,请投票给这个答案。
Camel Case是一种约定,而不是规范。所以我猜流行的意见规则。
在搜索现有代码或标记中的“流行”答案时,可能接受的答案是正确的。
答案 1 :(得分:156)
微软撰写的一些guidelines是camelCase
:
使用首字母缩略词时,请使用Pascal case或camel case作为长度超过两个字符的首字母缩略词。例如,使用
HtmlButton
或htmlButton
。但是,您应该将仅包含两个字符的首字母缩写词大写,例如System.IO
而不是System.Io
。请勿在标识符或参数名称中使用缩写。如果必须使用缩写,请将camel case用于包含两个以上字符的缩写,即使这与单词的标准缩写相矛盾。
总结:
当您使用两个字符长的缩写或首字母缩略词时,请将它们全部放在大写字母中;
当首字母缩写词超过两个字符时,请为第一个字符使用大写字母。
因此,在您的具体情况下,getUnescoProperties()
是正确的。
答案 2 :(得分:19)
首先,我必须澄清我不是母语为英语的人,所以我对英语语法的主张可能是错误的。如果您发现此类错误,请告诉我,我将非常感谢。
首字母缩略词的最佳做法是尽可能避免使用首字母缩略词。
无论如何,情况并非如此,因为首字母缩略词UNESCO
比全名UnitedNationsEducationalScientificAndCulturalOrganization
更为熟悉。
然后,我认为UNESCO
比Unesco
更有意义,因为它更接近真实生活形式,因此更加熟悉。我很难弄明白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
应该是XmlHttpRequest
或xmlHttpRequest
无法使用后续的大写缩略语,对于所有测试用例来说,它绝对不明确。
e.g。
你如何阅读这个单词HTTPSSLRequest
,HTTP + SSL
或HTTPS + SL
(除了......之外没有任何意义),在这种情况下遵循骆驼案例惯例并转到{{1或者httpSslRequest
,也许它不再好看,但它肯定更清晰。
答案 4 :(得分:11)
要转换为CamelCase,还有Google's (nearly) deterministic Camel case algorithm:
从名称的散文形式开始:
- 将短语转换为纯ASCII并删除任何撇号。 例如,“Müller的算法”可能会成为“Muellers” 算法“。
- 将此结果划分为单词,拆分为 空格和任何剩余的标点符号(通常为连字符)。
- 推荐:如果任何单词已经有传统的骆驼案例 通常使用的外观,将其分解为其组成部分 (例如,“AdWords”变为“广告词”)。注意这样的一个词 因为“iOS”本身并不是骆驼本身;它无视任何 惯例,因此该建议不适用。
- 现在小写所有内容(包括首字母缩略词),然后仅大写 第一个字符:
- ...每个单词,以产生上层 骆驼案,或
- ......除了第一个之外的每个词,都要屈服 较低的驼峰案例
- 最后,将所有单词加入 一个标识符。
请注意,原始单词的外壳几乎完全是 忽略。
在以下示例中,“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)
目前我使用以下规则:
首字母缩略词的首要案例:XMLHTTPRequest
,xmlHTTPRequest
,requestIPAddress
。
骆驼案例缩写:ID[entifier]
,Exe[cutable]
,App[lication]
。
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所说的内容之外,我还想回顾一下这个问题的答案。
我认为一般的答案是:它取决于您使用的编程语言。
Microsoft this一些指导原则似乎HtmlButton
是为此案例命名类的正确方法。
Javascript有一些带有首字母缩写词的全局变量,它以大写形式使用它们(但有趣的是,并不总是一致)这里有一些例子:
encodeURIComponent
XMLHttpRequest
toJSON
toISOString
答案 11 :(得分:0)
有两种&#39;首字母缩略词&#39;对程序员来说:
tmc and textMessageContainer
,通常显示为局部变量。在编程世界中,自然语言中的所有首字母缩略词都应被视为 word ,原因是:
编程时,我们应该用缩写样式或非首字母缩略词样式命名变量。因此,如果我们将函数命名为getUNESCOProperties,则意味着联合国教科文组织是一个缩写词(否则它不应该全部是大写字母),但显然,get
和properties
不是首字母缩写词。所以,我们应该命名这个功能
gunescop 或 getUnitedNationsEientificScientificAndCulturalOrganizationProperties ,两者都是不可接受的。
自然语言不断发展,并且 today's acronyms will become words tommorow,但计划应独立于这一趋势并永远站立。