SQLとJavaScriptでは異なるケースを使うので書いてみた。使うかどうかはわからない。
ブツ
ケース | 例 | 大文字化 |
---|---|---|
スネーク | java_script |
JAVA_SCRIPT |
キャメル | javaScript |
JavaScript |
チェーン | java-script |
JAVA-SCRIPT |
コード抜粋
使い方は以下のとおり。
Snake.toCamel('java_script') === 'javaScript'
Snake.toCain('java_script') === 'java-script'
Camel.toSnake('javaScript') === 'java_script'
Camel.toChain('javaScript') === 'java-script'
Chain.toSnake('java-script') === 'java_script'
Chain.toCamel('java-script') === 'javaScript'
大文字化させたければ第二引数にtrue
を渡す。
Snake.toCamel('java_script', true) === 'JavaScript'
Snake.toCain('java_script', true) === 'JAVA-SCRIPT'
Camel.toSnake('javaScript', true) === 'JAVA_SCRIPT'
Camel.toChain('javaScript', true) === 'JAVA-SCRIPT'
Chain.toSnake('java-script', true) === 'JAVA_SCRIPT'
Chain.toCamel('java-script', true) === 'JavaScript'
テスト
テストは以下のようにconsole.assert
で全パターン行った。
let actual = 'java_script'
let expected = 'javaScript'
console.assert(Snake.toCamel(actual)===expected)
- 4種=自分以外のケース2種 × 小文字・大文字2種
- 12種=4種 × スネーク、キャメル、チェーン3種
ついでに対象外ケースについてもテストした。
キャメルケースで略語を大文字で連続して書いてしまうと単語区切りとみなされてしまう。
let actual = 'toHTML'
let expected = 'to_h_t_m_l'
console.assert(Camel.toSnake(actual)===expected)
なので略語も単語として考え、先頭だけ大文字にし、以降は小文字で書くこと。
actual = 'toHtml'
expected = 'to_html'
console.assert(Camel.toSnake(actual)===expected)
また、先頭に区切り文字があるときキャメルケースにしようとすると大文字化されてしまう。
let actual = '_to_html'
let expected = 'ToHtml'
console.assert(Snake.toCamel(actual)===expected)
console.assert(Snake.toCamel('___to_html')===expected)
console.assert(Snake.toCamel('___to___html')===expected)
console.assert(Snake.toCamel('___to___html___')===expected)
そもそも_
や-
は単語区切りとして使われる想定なので、先頭や末尾に区切り文字がある場合はどうすべきか未定義。以下のように考えてみても、ケースバイケースなので絶対的な正解などない。
- 先頭や末尾についている区切り文字の扱い
- キャメルケースとしては消去するのが正しい?
- 消さずにそのまま付与すべき?(プライベートを意味するプレフィクスとして付与する場合があるため)
- 先頭文字の大文字可の是非
- 第二引数で
true
を渡していないなら小文字にすべき? - 区切り文字を目印に大文字化しているのだから現状でOK?
- 第二引数で
とくに大文字可の是非については2つのルールの間で矛盾してしまっている。まあ、現状のほうがコードが簡単で済むし、これでいいや。
そもそも文字ケースの話は細かいことであり、ここまで神経質になる必要もない。けれど無性に気になって仕方なかった。自動化したくなる症候群が発症してしまった。使うかどうかもわからないけど自己満足できたからよし。