変数の命名規則
名は体を現す変数や関数の命名規則はどうしてますか。
Names and natures do often agree.
個人の好みのあらわれるところではありますが、業務だとコーディング規約で強制されているものところもあると思います。
命名規則の例としては、複数単語からなる変数や関数の命名規則があります。
| Camal記法 最初の単語のみ小文字で始め、以降単語の先頭文字は大文字 | thisIsAnExample |
| Pacal記法 各単語の先頭文字は大文字 | ThisIsAnExample |
| アンダーバー区切り 単語は全て小文字で区切りはアンダーバー | this_is_an_example |
Camel記法やPascal記法は、JavaやC++のコーディング規約における変数や関数の命名規則としてよく見かけますし、アンダーバー区切りの命名規則はGNUコーディング規約(GNU coding standard)のようなC言語のコーディング規約における変数や関数の命名規則として見かけます。
複数単語の表現方法以外のところでは、意味名にその属性を示すプレフィックスをつけるというものがあります。その種の命名規則の中で、もっとも有名で悪名高いのものといえば、やはりハンガリアン記法でしょう。
Windowsプログラミングの経験があれば、一度は目にしたことがあるのではないでしょうか。Microsoftのプログラマが始めた記法で、意味名の前に変数の型(種別)を示すPrefixを付けるというものです。
# .NETでは使用しなくなったようです
意味を示すprefixを定義するというアイデア自体は良いと思うのですが、ハンガリアン記法が不評なのは、ひとつの変数にprefixが何個も付与された時です。
例えば、
char * apszName[]; /*名前の文字列へのポインタの配列*/
は、わかりやすいどころか意味不明の文字の羅列に見えてしまいます。
ポインタの「p_」、メンバの「m_」、グローバル変数を示す「g_」等は良いと思うので使います。しかし、charやlong等の種別は、コードを読む上でほとんど役に立ちません。勿論、役に立つことがなくはないですが、それよりも間違ったprefixが当てられて気がつかないので、冗長なコメントと同様かえって混乱のもとだと思っています。
ハンガリアン記法には欠点も多いですが、統一した命名規則を定義するという点は他人のコードを解読する時には重要です。
まれに、統一されていないソースにであうことがありますが、第3者から見ると非常に混乱します。
少なくとも、自分なりの命名規則は持ちましょう。
【関連リンク】
・Hungarian Notation (MSDN)
・名前付けのガイドライン (MSDN)
・ハンガリアン記法は悪なのか?(Lynxの迷走(瞑想?))
・ハンガリアン記法ってナンデスカ?(それほど間違ってないプログラマ用語辞典)
・GNU コーディング規約 - 変数,関数,ファイルの名前付け
・Java言語コーディング規約 - ネーミング規約
【関連書籍】
・C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス
・リファクタリング―プログラムの体質改善テクニック
・プログラミング作法 ブライアン・カーニハン ロブ・パイク
・組込みソフトウェア開発向けコーディング作法ガイド[C言語版] SEC
・Code Complete第2版〈上〉―完全なプログラミングを目指して スティーブ マコネル