プログラミングにおけるプレフィックス(ハンガリアン記法)について

少し古い話からはじめます。筆者が最初にプログラムを書いたのは15年以上も前のことで、パソコン用OSといえばMS-DOSが主流になりはじめた頃のことでした。その頃は開発言語もアセンブラ(MASM)しかなく、プログラムのすべてをコーディングシートに記述してから一気に入力してました。今から思えば大変な作業ですね。バグのほとんどを机上デバッグでつぶす(理想ですが)ような、より精度の高いプログラムが求められていた時代でした。今の若い技術者には信じられないほど昔のことと思えるでしょうが、筆者からすればつい数年前(?)のことのように思い出されます...

その後コンピュータの技術は加速的に進歩し、パソコン用の開発言語はアセンブラからC言語へ、更にはVC++、VBへ変わっていきました。また、OSについてもCUIベースのMS-DOSからGUIベースのWindowsへと格段なる進化を遂げてきました。

本コラムのテーマは「プログラミングにおけるプレフィックス(ハンガリアン記法)について」ですが、まずハンガリアン記法について簡単にご説明したいと思います。ハンガリアン記法とは、ハンガリー出身の Charles Simonyi というプログラマが用いた識別子の命名方法のことを呼び、識別子の先頭にデータ型を表す記号を付加するのが特徴です。Microsoft社が.NETをリリースするまでの間、Windowsプログラミングのコーディング基準として採用していました。

次にハンガリアン記法を使用する上でのメリットを考えてみたいと思います。ハンガリアン記法では変数名を定義する際に、そのスコープを示す文字を変数のプレフィックスとして用います。グローバル変数を示す g_ 、クラスのメンバ変数を示す m_ などがそれに値します。変数名でスコープを示すこれらの考え方は、個人的に筆者は賛成しています。

2つ目として、変数名に型を示す文字をつけることについて考えてみたいと思います。これについてはメリットになる反面、使用方法を誤るとデメリットにもつながります。C言語では変数の定義が関数の先頭でなければならなかったため、変数のデータ型を確認する際はそこまで戻る必要がありました。ハンガリアン記法では変数名にデータ型をつける方式を用いたため、直感的にデータ型を判断することができます。これは他人のプログラムを解析するのに非常に有効な手段となります。ただし、変数に示されるデータ型が実際のデータ型と異なってしまった場合(初心者に良くあるミスですが)、バグのトレースを見誤ることが発生します。そのような理由からブロック内のローカル変数が使用できるC++、VB.NETおよびC#ではハンガリアン記法を使用しないほうが安全かもしれません。

最近、巷ではハンガリアン記法不要説(使用悪)がとびかっています。また、Microsoft社も.NETでは一転してこのハンガリアン記法は使うべきではないとさえ示しております。はたしてどちらが良いのでしょうか。とてもこの場では判断は不可能ですし、良い悪いの判断は誰にも示すことができないでしょう。ただし、これだけははっきり言っておきたいと思います。プロジェクトとして大規模なシステムを開発する場合、個人的な感情(独自のプログラミングスタイル)は捨てるべきです。必ずコーディング基準を設定し、それに添った形でプログラミングを行いましょう。

最後に、筆者が一番大切としている考えを述べて本コラムのまとめとします。ひとつのプロジェクトに多数のメンバが参加する場合、そのメンバのスキルおよび育ってきた環境は様々です。人によっては他人には解読不可能なプログラム(プロなのだからこんなことは決して許されない...)を平気で作成する人もいます。自信を持って作成したプログラムでも、きっといつかは誰かが苦しんで、またはぼやきながら読む時がくる筈です。やはり、どんな人に見られても決してはずかしくない、もっと言えば、どんな人にも感心されるようなプログラムの作成を常に心掛けていたいものです。

最新情報をチェックしよう!