EJP 株式会社

ハンガリアン記法って気持ち悪い。

※この記事は2013年に書いたものです。すこし変化した私の考え方を以下に書いてみました。

以下の記事は数年前に書いたのですが、いまだにコメントを頂いたりして、いろいろと考えている方が多いのだなと感じたので、今の私の気持ちを書いてみようかなと思いました。ハンガリアン記法って気持ち悪い。ハンガリアン記法というのは要するに型についての説明が変数名に記載されているため、冗長に感じてしまう記法です。当時の私は、コメントを極力減らし、コードそのものがコメントとしての説明を兼ねているソースコードになるようにコーディングを心がけていました。しかし、さまざまなプロジェクトを経験していくと、最近では...
ハンガリアン記法について今思うこと - EJP 株式会社

あるプロジェクトのソースコードがすべて、ハンガリアン記法で記述されていました。
私はハンガリアン記法が気持ち悪くて、気持ち悪くてしょうが無いです。

ハンガリアン記法とは

ハンガリアン記法とは主に、変数名などの先頭に、その変数の方を示す接頭語をつけるソースコードの記述スタイルです。
例えば、以下の様にintとunsigned intの変数があったら、iCountとしたり、uiNumberとしたりすることです。

int iCount;
unsigned int uiNumber;

変数がどこに記述されていても、宣言部まで遡らずに方がわかるため、明示的でわかりやすいです。
ただ、ほんとにそんな情報必要でしょうか???

単純に宣言部まで遡ってこの変数はこういう方なんだと覚えてから、トレースなりするのは大した労力ではないと思います。
しかし、このように方を明示的に変数名に記載することで、変数の型を変更する必要が出た際に、変数名まで修正しなければならないし、そちらの方が修正インパクトもあり大変な労力だと思います。

また、私はとにかく冗長なコードが嫌いです。
宣言部でこの変数はこの型です。と記述したのですから、それ以上にその情報を出す必要はないとおもいます。

そこで、これよりはマシでよく見かけるのはスネーク記法です。

スネーク記法とは


単語の区切りを「_」アンダーバーでつなげて変数名などを記載する記法です。

int client_num;
unsigned int server_num;

これはこれでよいのですが、私は「_」が邪魔でしょうがないです。

そこで私はキャメル記法で書くようにしています。

キャメル記法


複数単語が連なる変数名の場合、ラクダのコブの様に単語の先頭を大文字にすることで、意味の分割を図ることです。

int numOfClient;
unsigned int CountOfServer;

先頭の文字も大文字にするケースを「アッパーキャメルケース」、小文字にする場合を「ローワーキャメルケース」というようです。
詳しくはWikiをご参考までに「キャメルケース」。
私は「ローワーキャメルケース」が好きです。

みなさん、それぞれ独断と偏見によりソースコードの記述スタイルはそれぞれあると思います。
私のモットーは「記載する文字数を少しでも少なく、かつ後で読んだ時に意味がわかること」としています。

私のベストなスタイル例

私が理想のコードは以下のような形です。

int main(int argc, char **argv) {
int numOfClient;
char stringOfClient[100][10];

memset(stringOfClient, 0, sizeof(stringOfClient));
for (numOfClient = 0; numOfClient < 100; numOfClient++) {
sprintf(stringOfClient[numOfClient], "client:%d¥0",numOfClient);
}
return 0;
}

簡単に説明しますと、変数宣言は「ローワーキャメルケース」になっています。
また、変数宣言時には変数を初期化していません。

numOfClientについては、for文の初期化時に初期化しますし、stringOfClientについては変数宣言時ではなく使用直前に初期化することがベストだと考えました。

あまり、お決まりのように変数初期化し過ぎるとバグを解析するための情報が消えてしまったりすることもあるため、1ステップ1ステップ必然的に必要なコードを書くように心掛けています。

みなさんのお好みはどのようなコードでしょうか?

あわせて読む

新着記事

ブログを購読