単語がひとつの場合
キャメル記法とアンダースコア記法は複合語のための規則なので、単語がひとつの場合は想定外だったと思われます。 Intact Case の規則は、単語がひとつの場合でも適用できます。
camelCase ⇒ snake_case
# | 手順 | 実例 |
---|---|---|
0 | 元の StudlyCaps | HTML |
1 | トークンに分割 | HTML |
2 | 頭字語の後に区切り子を追加 | HTML_ |
3 | 小文字に変換 | html_ |
4 | 区切り子を挟んで連結 | html_ |
snake_case ⇒ camelCase
# | 手順 | 実例 |
---|---|---|
0 | 元の snake_case | html_ |
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 | 元の StudlyCaps | PHPUnit |
1 | トークンに分割 | PHP + Unit |
2 | 先頭の単語を snake_case に変換 | php_ + Unit |
3 | 連結 | php_Unit |
camelCase ⇒ StudlyCaps
# | 手順 | 実例 |
---|---|---|
0 | 元の camelCase | php_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 で頭字語のトークン維持 |