变量的驼峰命名法的特例处理

使用驼峰命名法(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

推荐阅读更多精彩内容