命名規約
Sugarプロジェクトの掲示板*1で命名規約についての議論をしているんだけど、興味、意見等あるなら書き込んで欲しいな*2。
C++の規約としては
が有名どころかな?いや、知らんけど。
C++ コーディング標準のほうはJavaのものを基にしたからか、publicクラスがどうの、toStringがどうのとおかしい部分もあるけど、適宜読み替えればまぁ自分好みになっている*3。
ということで今日は命名規約について。
まずは命名規約自体について。
命名規約とは
命名規約はネーミングルールや命名規則とも呼ばれるが、一般的には命名規約と呼ばれることが多いようだ*4。意味はその名のとおり、「どのように名前*5をつけるかのルール」である。
似たものに「コーディングルール(コーディング規約)」があるが、こちらは命名方法やコーディングスタイル等を含めた規約なので、まぁ、命名規約も含まれていることになる。
これを定め、守ること(これ大事)により、プログラムに統一感が生まれ、可読性が向上する。逆に、これが定められていない*6、もしくは定められているにもかかわらず守られていないと、可読性は低下する。
しかし、名前の付け方やコーディングスタイルは人の好みによるので、ある程度の種類にまとめられているものの、絶対的な正解はないことに注意が必要である。
ただし、もし命名規約が定められているとしても、連番等で管理するような規約の場合は可読性は最悪のものになる*7。
命名規約の例*8
例1、ハンガリアン記法
MicroSoftに勤めているハンガリー人が考えたのでこの名前に。詳細(詳細?)はハンガリアン記法とは ─ よく わかるかもしれない IT・コンピュータ 用語辞典 [真・コンピュータ用語辞典]に譲るとして、今ではMicroSoftでさえ使用を推奨していない。ただ、本来のハンガリアン記法は現在広まっているものとはまったく別のもので、本来のものは間違ったコードは間違って見えるようにする - The Joel on Software Translation Projectを参考にしてもらえばいい*9。
例2、JavaTM 言語 コーディング規約
Javaを作ったSunが出しているコーディング規約で、命名規約も含む。日本語訳として沼田 哲史さんが訳したJava 言語 コーディング規約がある。この規約はよくまとめられており、使いやすい規約である*10。
例3、GNU コーディング規約
おそらくもっとも有名な開発プロジェクトで、そのプロジェクトが採用しているコーディング規約の日本訳が、404 Not Foundである。
例4、コーディング規約の会
上でも紹介したが、日本の- オブラブのコミュニティである、- コーディング規約の会Topが紹介しているコーディング規約で、命名規約も含まれる。基本的にJava 言語 コーディング規約を元に拡張したものとなっている。
命名のパターン
これまで紹介した以外にも命名規約はたくさんあるが、いくつかパターンがある。
変数名
変数名は小文字からはじめるのは大体どの規約でも共通している。違いは単語の区切りをどうするかで、主流としてはアンダーバーで区切るものと、キャメルケースを使用する方法がある。変数名は基本的に全体として名詞になるようにつけるのが一般的である。
// Javaでの例
int
like_this;// アンダーバー
int
likeThis;// キャメルケース
このほか、(現在の)ハンガリアン記法に代表される、型を変数名に含める記法では、各種プレフィックスやサフィックスが定められる。このような記法でなくても、論理型(Javaでのboolean、C++/C#でのbool)はisやhasではじめる、といったプレフィックスが存在する。
// Javaでの例
boolean
isClose;boolean
bClose;// ハンガリアン
変数名に限ったことではないが、単語の省略について言及している規約も多い。
定数
定数は(知っている中では)どんな規約でもすべて大文字、区切りはアンダーバーである。
*1:SugarプロジェクトはWindowsでのゲームプログラミング用ライブラリの開発プロジェクト。詳しくは[http://project-sugar.hp.infoseek.co.jp/:title]をどうぞ。
*2:もちろん、掲示板のほうにね
*3:テンプレートのことが書かれていないなど、不満もある
*5:言語によって異なるが、変数名や関数名、クラス名、ファイル名等の名前。
*6:明文化されていないという意味ではなく、暗黙の了解すらないこと。
*7:友人K氏のインターン先では連番で管理していたらしい・・・ 何処とはいわないけど。
*8:リンクはできる限り本題に近い部分のアンカーへと貼った。
*9:このページでの本題はJavaとC++でSecureStringを作った自分としては良くも悪くも、非常に興味深い内容である。ぜひ全部読むことをおすすめする。
*10:もちろん、自分にとって
*11:変換用の関数や慣習があるので、絶対ではない。例、toString、valueOf等