自然な相互変換
頭字語を含む複合語を camelCase と snake_case で自然に相互変換するための規則が Intact case です。相互変換する際にルールをひとつ追加することで、単語の区切りや頭字語の情報を維持したまま相互変換が可能になります。
camelCase ⇒ snake_case
# | 手順 | 実例 |
---|---|---|
0 | 元の camelCase | getUTCDay |
1 | トークンに分割 | get + UTC + Day |
+ | 頭字語の後に区切り子を追加 | get + UTC_ + Day |
2 | 小文字に変換 | get + utc_ + day |
3 | 区切り子を挟んで連結 | get_utc__day |
snake_case ⇒ camelCase
# | 手順 | 実例 |
---|---|---|
0 | 元の snake_case | get_utc__day |
1 | トークンに分割。[1] | get + utc_ + day |
2 | 先頭を除く各単語の頭文字を大文字に変換 | get + Utc_ + Day |
+ | トークンの最後が区切り子の場合は頭字語と判定して、区切り子を消して全文字を大文字に変換 | get + UTC + Day |
3 | 連結 | geUTCDay |
[1] 区切り子がふたつ連続して並んでいる場合は、以下のように処理します。
- ひとつ目は、直前のトークンに含める
- ふたつ目は、トークンを分割するための区切り子とする
複合語全体の最後にある区切り子は、「頭字語の末尾に追加されたもの」とします。
頭字語が連続する場合
XMLHttpRequest は、 Javascript の Ajax でお馴染みのクラス名です。 HTTP は頭字語なので、 XMLHttpRequest をトークン分割すると本来なら以下のようになるはずです。
XML + HTTP + Request
ところが、 XML と HTTP を全部大文字として単純に連結した場合、 XML と HTTP の区分が分からなくなります。これでは、可読性が保たれているとは言えないでしょう。
可読性が保たれない例
XML + HTTP + Request | XMLHttpRequest |
parse + DBM + XML | parseDBMXML |
TCP + IP + Socket + ID | TCPIPSocketID |
Intact case では、頭字語が連続する場合、単語間に区切り子を挟んで表記します。
XML + HTTP + Request | XML_HTTPRequest |
parse + DBM + XML | parseDBM_XML |
TCP + IP + Socket + ID | TCP_IPSocketID |
この規定により、幾つかの頭字語を含む camelCase と snake_case の自然な相互変換が可能になります。
camelCase ⇒ snake_case
# | 手順 | 実例 |
---|---|---|
0 | 元の camelCase | XML_HTTPRequest |
1 | トークンに分割 | XML + HTTP + Request |
2 | 頭字語の後に区切り子を追加 | XML_ + HTTP_ + Request |
3 | 小文字に変換 | xml_ + http_ + request |
4 | 区切り子を挟んで連結 | xml__http__request |
snake_case ⇒ camelCase
# | 手順 | 実例 |
---|---|---|
0 | 元の snake_case | xml__http__request |
1 | トークンに分割 | xml_ + http_ + request |
2 | 先頭を除くトークンの頭文字を大文字に変換 | xml_ + Http_ + Request |
3 | トークンの最後が区切り子の場合は頭字語と判定して、区切り子を消して全文字を大文字に変換 | XML + HTTP + Request |
4 | 連結(頭字語が並ぶ場合は、間に区切り子を挿入) | XML_HTTPRequest |