使用驼峰命名法(Camel Casting)的时候总是会为缩写,常用语该怎么表示产生困惑,网上搜索了一下,发现一篇文章。由于文章是需要medium 订阅的,因此我连翻译带补充了一下。
每种语言都有自己的命名习惯,尤其在遇到缩写的情况,例如: JSON orJson, URL or Url, HTTP or Http。在使用 Camel Casting 的时候怎么命名一直没有一致的标准。
一种“简单”的回答是: 遵循你所使用的语言的规范或框架的规范。这种回答其实还是没有标准。而上述情况是如此常见,因此无论如何我们总需要把“共识”再推进一步。
问题来源于缩写 (ID -> Identifier)和简写 (HTTP -> HyperText Transfer Protocol), 甚至一些特殊的形式进行约定,例如 IPv6, IoT iOS 等。
下面列出了一个将英语短语转变为 camelCase 的思路。
从英语短语到 camelCase 的转换算法
- 首先: 转换英文短语到 ASCII,移除全部撇号,省略号等,例如:
- “Müller’s algorithm” 转换为 “Muellers algorithm”
- 将上面的成果以单词边界进行分隔 (以空格、连字符、下划线来分隔)
有些英语短语已经有 Camel Case 了,例如: AdWords 是 “ad words” 转化后的结果,那么你需要把它们先反向解析为 “ad words”。注意 IoT、iOS 不应该出现在这种词汇表里,因为它们是缩写,不是完整的单词组成的短语。
- 然后,将全部字母转小写,包括缩写和简写,但是对于以下单词进行首字母大写:
- 如果仅有一个单词,则不进行任何首字母大写的转换
- 如果有多个单词,对第一个单词之外的其他单词进行首字母大写转换
- 最终,将所有转换后的单词连接起来,但是:
* 如果某个单词只有一个字母,且不是短语中的最后一个单词,那么这个单字母单词必须和下一个单词连接在一起,例如:
* btreeMap (✔︎), bMapTree (𐄂), threeM (✔︎)
短语 | 正确 | 错误 |
---|---|---|
"XML Http Request" | xmlHttpRequest | XMLHTTPRequest |
"new customer ID" | newCustomerId | newCustomerID |
"inner stopwatch" | innerStopwatch | innerStopWatch |
"supports IPv6 on iOS" | supportsIpv6OnIos | supportsIPv6OnIOS |
其中有个特例,iOS
还是 IOS
?考虑到已经有了一些常用的用法,例如在 ReactNative 中的 ActionSheetIOS
或者 LinkingIOS
之类,所以建议用 IOS
而不是 iOS
,因此,supportsIpv6OnIos
-> supportsIpv6OnIOS
。