この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
皆さんはどのように変数名を決めているでしょうか。
命名規則がしっかり決まっているようであればそれに合わせれば良いのでしょうが、
複数人でプログラムしている場合、同じ単語を使っていても違った使い方をされる変数だったりすることがあります。
そんなことが自分自身にもありましたので命名規則の内の一つ、ハンガリアン記法について書いていきます。
ハンガリアン記法とは?
キャメルケース、スネークケースなどの単語と単語のつなげ方を意味するものではなく、
変数の意味や用途をわかやすくするために情報つけて命名するもので、以下の二つのものがあります。
- アプリケーションハンガリアン
- システムハンガリアン
アプリケーションハンガリアン
変数名にその変数の情報をつけてぱっと見で間違いを分かりやすくする方式です。
例えば何かの座標を入れる変数名にpositionX
positionY
と命名するのではなく、absPositionX
relPositionY
といったように絶対座標なのか相対座標なのかといった情報を付け加えるといった感じです。
そうすることによって書かれたコードが間違いであることを分かりやすくします。
Player.posX = absPositionX; Player.posY = relPositionY;
上記のような代入がされていたら誰でも疑問を抱くと思います。
アプリケーションハンガリアンなんて知らなくても、用途を分かりやすくしようと
変数名をつけるときにこのような形にしている人もいるんではないでしょうか。
システムハンガリアン
ハンガリアン記法といったらこっちのイメージが強いです。
変数名の頭などにその変数の型やスコープなどの情報となる文字をつける方式です。
一般的な例を以下の表にまとめました。
型,スコープなど | 追加文字 | 使用例 |
---|---|---|
論理型 | b | bEnable |
整数型 | n | nCount |
浮動小数型 | f | fAngle |
文字列 | s | sDescription |
ポインタ | p | pParent |
グローバル変数 | g_ | g_pManager |
クラス | C | CManager |
クラス内のメンバ変数 | m_ | m_nCount |
デメリット
- システムハンガリアンで変数名をつけていた場合、途中から変数の型を変更しようとした場合多くの手間がかかる。
- 型を変数名につけてしまっているので、変数名の変更忘れなどがあると無駄にソースが分かりにくくなってしまう。
- 移植性が悪くなる。
おわりに
個人的にシステムハンガリアンに関しては型宣言を必要とするc++やc#においては全く必要がないかと思います。
コンパイル時点でエラーや警告でわかる場合が多いですし。
ですが型宣言を必要としないrubyなどの言語ではシステムハンガリアンで記述してもいいなと思いました。
変数にいろんな型のデータを代入できるがゆえに、何を入れるための変数なのか、何が入っている変数なのか役割をしっかり定義しておいたほうがいいと思います。