一般に ObjectiveC だったり Java だったりといった言語は CamelCase で変数名やクラス名を付けるというのが定石のようになっていますが、世の中には「この言葉の CamelCase はどういう風になるんだろう」というのが曖昧になるケースがあります。
例えば IPv6Address の CamelCase は以下のどれになるでしょうか。
- Ipv6Address
- IPv6Address
このあたりを決めないと、「Ipv6Address」と「IPv4Address」(P がそれぞれ小文字と大文字)なんてクラスが同一プロジェクトの中で混在したりしますし、DB のカラムとクラス名を自動マッピングするフレームワークを使用していた場合、case sensitive なファイルシステムと case insensitive なファイルシステムとで挙動が異なったりするといった悲劇を生みます。
今日はふと Google の定義している Java の Code Style の和訳 を読んでいたのですが、決定的に決まるような方法を定義していて参考になりました。
名前の通常の形から始めて、
言葉を素のASCIIに変換し、アポストロフィを除去する。例えば、"Müller’s algorithm" は “Muellers algorithm”に変換される。
Google Java Style Guide (非公式和訳)
これを単語に分割する。つまり、スペースや残っている句読点、ハイフンで分離する。
推奨:もしもある単語が一般的にキャメルケースの形になっていたら、これを分解する。
(例:「AdWords」 を 「ad words」にする。)「iOS」のような単語は本当はキャメルケースになっていない
規約に当てはまらないのでこの推奨は適用しないことに注意する。
(頭字語を含めて)すべてを小文字にする。そして最初の文字を大文字にする。
各単語とは大文字キャメルケースとなるか、最初の単語を除いて小文字キャメルケースになる。
最後に、すべての単語を1個の識別子として連結する。
これに従うと、IPv6Address の Camel Case は (Ipv6 が単語であるという前提として) ipv6Address になります。ipV6Address ではなく。
メンバがたくさんいるプロジェクトにおいて、何が正しいのかを判断するには、その判断の幹が必要になります。こういった規約で正しさを定義するのは、変な争いを生まなくて良いですね。