ハンガリアン記法について考察する

かつてプログラムにおいてしばしば命名規則として使われることがあったハンガリアン記法であるが、今日では.NET Frameworkやその他の主要なプログラミング言語の命名規則では非推奨として扱われるようになった結果、使われることはまずなくなった。ここでは、そんな「ハンガリアン記法」について考察をしてみたい。

ハンガリアン記法の由来

ハンガリアン記法の由来となったのは、1981年から2002年にかけてマイクロソフト社にてMicrosoft Miltiplan, Excel, Wordを開発したチャールズ・シモニーで、氏がハンガリー出身だったことから氏が考案した変数の命名法がハンガリアン記法として名付けられたことによる。

ハンガリアン記法には大きく2種類ある

今日ではハンガリアン記法にはその目的において大きく2種類ある。シモニーが考案した「アプリケーションハンガリアン」と、それが誤解されて広まった「システムハンガリアン」がある。

アプリケーションハンガリアン

アプリケーションハンガリアンは、シモニーがMultiplan, Excel, Wordを開発するときに考案した記法で、マイクロソフト社のアプリケーション部門で使われるようになったことから呼ばれるようになった記法である。

アプリケーションハンガリアンでは変数が何のために使われるのか、という点に着目して接頭辞をつける記法で、これは変数の型や修飾子では判別できない情報を付与することで、紛らわしい変数の意味をわかりやすくし混同しないようにするために作られたものであった。

例えば、英語版のWikipediaの「Hungarian notation」においては、以下の変数名ではアプリケーションハンガリアンの例であると示している。

  • rwPosition"rw"は「行」(row)を示している。
  • usName"us"は安全ではない文字列(unsafe string)であることを示している。
  • szName"sz"はゼロで終わる文字列(zero-terminated string)であることを示している。

これらの情報では、当時のC言語では変数の型や修飾子では表現できなかった変数の目的の情報が含まれており、後発の言語では修飾子や言語仕様の変化で不要になったものも含まれている。

ただし、アプリケーションハンガリアンでも意味情報が実質的に含まれていないものもあり、後述のシステムハンガリアンと変わらないものも少なくない。

システムハンガリアン

システムハンガリアンは、ExcelやWordでの成功をうけて、Microsoft Windowsの開発チームで用いられたハンガリアン記法で、Windows APIやMFCなどがシステムハンガリアンの記法に基づいて書かれていると言われている。

システムハンガリアンでは、変数のデータ型に基づいて接頭辞を示すものになっている。

  • b/f — 論理型(boolean / flag)
  • ch — 文字型(char)
  • str — 文字列型(string)

今日ではハンガリアン記法が必要になることはまずない

かつては開発においてしばしば使われていたハンガリアン記法も、今日においては必要となることはまずないといえる。今日においては統合開発環境が強化されたことで、変数の型付けのチェックがしっかり行われるようになっており、ほとんどの場合は変数名に型を入れる必要がないこと、そもそも変数名に型などの情報を含めたときに、データ型が変更されたり、あるいはその目的が変更されたりしたときに、変数名を変更しなければならない点で修正の際に問題を引き起こしてしまう。

また、変数名を付ける際に十分な説明ができていれば、システムハンガリアンはもちろんアプリケーションハンガリアン的な命名でも冗長になるため、今日の開発ではハンガリアン記法に頼らずとも必要十分に説明できる命名をしていれば、ハンガリアン記法を使わなくてもよいのである。

コメント

タイトルとURLをコピーしました