The Cusp of Helix

Intact Case [詳細]

単語がひとつの場合

キャメル記法とアンダースコア記法は複合語のための規則なので、単語がひとつの場合は想定外だったと思われます。 Intact Case の規則は、単語がひとつの場合でも適用できます。

camelCase ⇒ snake_case

#手順実例
0元の StudlyCapsHTML
1トークンに分割HTML
2頭字語の後に区切り子を追加HTML_
3小文字に変換html_
4区切り子を挟んで連結html_

snake_case ⇒ camelCase

#手順実例
0元の snake_casehtml_
1トークンに分割html_
2先頭を除く各単語の頭文字を大文字に変換Html_
3トークンの最後が区切り子の場合は頭字語・省略語と判定して、区切り子を消して全文字を大文字に変換HTML
4連結HTML

先頭の単語が頭字語の camelCase

複合語の最初の単語が頭字語の場合、そのまま camelCase の規則で複合語にすると、先頭の文字が大文字なので StudlyCaps になります。

  • PHP + Unit = PHPUnit
  • IO + Exception = IOException

Java のクラス名は StudlyCaps なのでそのまま適用できますが、メソッド名の場合に問題が生じます。先頭の一文字だけを小文字にするだけではそこで単語が分裂してしまいます。 camelCase では、小文字の後に大文字がくるとトークンの区切りと認識されるからです。

  • PHPUnit ⇒ pHPUnit ⇒ p + HP + Unit
  • IOException ⇒ iOException ⇒ i + O + Exception

複合語のトークンを維持するため、 Intace Case では以下のようにして先頭の頭字語を単語ごと小文字化します。

StudlyCaps ⇒ camelCase

#手順実例
0元の StudlyCapsPHPUnit
1トークンに分割PHP + Unit
2先頭の単語を snake_case に変換php_ + Unit
3連結php_Unit

camelCase ⇒ StudlyCaps

#手順実例
0元の camelCasephp_Unit
1トークンに分割php_ + Unit
2先頭の単語を StudlyCaps に変換PHP + Unit
3連結PHPUnit

この規則は、先頭の単語が頭字語ではない場合でも共通に適用できます。 camelCase と StudlyCaps の変換規則が一般化されたものと考えて下さい。

可逆性と可読性

snake_case でアンダースコアが 2 個並ぶのに違和感を覚える人は多いかと思います。 Intact Case の目的は「 camelCase と snake_case の自然な相互変換」です。トークンを維持することと、区切り子の冗長性がトレードオフになっていると考えられます。

Intace Case は頭字語を snake_case に投影するための規則だと言えます。 Intact Case が有する可逆性と可読性は、何かの役に立つでしょう。

可逆性camelCase と snake_case の自然な相互変換
可読性snake_case で頭字語のトークン維持