The Cusp of Helix

Intact Case [詳細]

自然な相互変換

頭字語を含む複合語を camelCase と snake_case で自然に相互変換するための規則が Intact case です。相互変換する際にルールをひとつ追加することで、単語の区切りや頭字語の情報を維持したまま相互変換が可能になります。

camelCase ⇒ snake_case

#手順実例
0元の camelCasegetUTCDay
1トークンに分割get + UTC + Day
+頭字語の後に区切り子を追加get + UTC_ + Day
2小文字に変換get + utc_ + day
3区切り子を挟んで連結get_utc__day

snake_case ⇒ camelCase

#手順実例
0元の snake_caseget_utc__day
1トークンに分割。[1]get + utc_ + day
2先頭を除く各単語の頭文字を大文字に変換get + Utc_ + Day
+トークンの最後が区切り子の場合は頭字語と判定して、区切り子を消して全文字を大文字に変換get + UTC + Day
3連結geUTCDay

[1] 区切り子がふたつ連続して並んでいる場合は、以下のように処理します。

  1. ひとつ目は、直前のトークンに含める
  2. ふたつ目は、トークンを分割するための区切り子とする

複合語全体の最後にある区切り子は、「頭字語の末尾に追加されたもの」とします。

頭字語が連続する場合

XMLHttpRequest は、 Javascript の Ajax でお馴染みのクラス名です。 HTTP は頭字語なので、 XMLHttpRequest をトークン分割すると本来なら以下のようになるはずです。

XML + HTTP + Request

ところが、 XML と HTTP を全部大文字として単純に連結した場合、 XML と HTTP の区分が分からなくなります。これでは、可読性が保たれているとは言えないでしょう。

可読性が保たれない例

XML + HTTP + RequestXMLHttpRequest
parse + DBM + XMLparseDBMXML
TCP + IP + Socket + IDTCPIPSocketID

Intact case では、頭字語が連続する場合、単語間に区切り子を挟んで表記します。

XML + HTTP + RequestXML_HTTPRequest
parse + DBM + XMLparseDBM_XML
TCP + IP + Socket + IDTCP_IPSocketID

この規定により、幾つかの頭字語を含む camelCase と snake_case の自然な相互変換が可能になります。

camelCase ⇒ snake_case

#手順実例
0元の camelCaseXML_HTTPRequest
1トークンに分割XML + HTTP + Request
2頭字語の後に区切り子を追加XML_ + HTTP_ + Request
3小文字に変換xml_ + http_ + request
4区切り子を挟んで連結xml__http__request

snake_case ⇒ camelCase

#手順実例
0元の snake_casexml__http__request
1トークンに分割xml_ + http_ + request
2先頭を除くトークンの頭文字を大文字に変換xml_ + Http_ + Request
3トークンの最後が区切り子の場合は頭字語と判定して、区切り子を消して全文字を大文字に変換XML + HTTP + Request
4連結(頭字語が並ぶ場合は、間に区切り子を挿入)XML_HTTPRequest