ハンガリアン記法とは何ですか?それを使用する必要がありますか?

プログラミング界で有名な引用は次のとおりです。

コンピュータサイエンスには、キャッシュの無効化と名前の付け方という2つの難しいことがあります。

ハンガリアン記法は、名前を少し簡単にしようとするシステムです。既存のコードベースを探索するときに、ハンガリアン記法に出くわす可能性があります。あなたはそれを使うことに特に熱心な同僚を持っているかもしれません。しかし、それは何ですか、そしてそれはどのように見えますか?そして、あなたは本当にそれを使うべきですか?

ハンガリアン記法とは何ですか?

ハンガリアン記法は、識別子の命名に関する規則です。これは主に変数の命名に適用されますが、関数の命名もカバーできます。表記法は、変数の名前がそのタイプまたは目的をどのように示すことができるかを形式化する試みです。

ハンガリアン記法を使用すると、変数名はすべて、合意された意味を持つ文字のグループで始まります。これらの文字は通常、変数のタイプの省略形です。たとえば、文字lは長整数を表す場合があります。略語strは文字列を表します。

本当にハンガリー人ですか?

はい、ハンガリー記法は確かにハンガリー人によって発明されました! Charles Simonyiは、この用語を発明したとき、マイクロソフトの従業員でした。彼は会社のプログラマーであり、アプリケーションソフトウェアに取り組んでいました。

他のほとんどの西洋言語とは対照的に、ハンガリー語の名前は最初に家系の名前を並べ、次に名前を付けます。ハンガリアン記法という用語は、この事実を参照している場合もあれば、偶然の一致である場合もあります。シモニーの母国語のおかげで、もっと自然だったかもしれません。

それはどのように見えますか?

ハンガリアン記法には、変数に単に年齢という名前を付けるのではなく、その変数のタイプを表す接頭辞が含まれています。たとえば、Cでは、プログラマーは次のようにそのような変数を宣言する場合があります。

 int iAge;

Cは強く型付けされた言語であるため、 iプレフィックスは宣言の時点で冗長であることに注意してください。ただし、後で変数を使用する場合は、プレフィックスが役立ちます。

 printf("I am %d years old", iAge);

プレフィックスは、正しいタイプの変数を使用していることを思い出させるのに役立ちます。

PHPなどの弱い型の言語では、変数は、保持する値に応じて異なる型を採用できます。したがって、ハンガリアン記法は潜在的により有用です。

 $iAge = 21;

一般的なハンガリアン記法の例をさらにいくつか示します。

プレフィックスタイプ
bブール値bLightsEnabled
cキャラクターcLetterGrade
strストリングstrCategory
整数iWheels
f浮くfMiles
CクラスCPerson
{クラス名}オブジェクトpersonLeader

システムハンガリー語とアプリハンガリー語

ハンガリアン記法には分割があります。一方のコーナーにはSystemsHungarianがあり、もう一方のコーナーにはAppsHungarianがあります。違いは微妙ですが、非常に重要です。

Systems Hungarianは、人々がハンガリー語表記法と関連付けることが多いバージョンです。上に示したように、変数のタイプを厳密に扱います。

Apps Hungarianは、データ型ではなく変数の目的をエンコードしようとします。これははるかに広い概念であるため、例ではさまざまなユースケースをカバーできます。

 // an Unsafe String eg a name the user entered in a web form
$usName
// the Length of the vertical side
$lVertical
// a Count of references to an object
$cRefs

Apps Hungarianは、ハンガリー語表記の元の形式であり、目的を説明することがSimonyiの意図でした。 Systems Hungarianは突然変異のようなものであり、多くの人がもっと悪いことだと主張しています。

ハンガリアン記法の良いところは何ですか?

先に述べたように、Systems Hungarianは、タイプの弱い言語に役立ちます。これにより、コードを見ている人は、変数が表示されるたびに、変数の型を即座に判別できます。

ハンガリアン記法は、一貫した変数の命名を強制するのにも役立ちます。結局のところ、悪い変数の命名は、最も一般的なプログラミングの間違いの1つです。 Apps Notationは、プログラマーが他の方法では警告しない重要なエラーを見つけるのに役立つ場合があります。

そして、ハンガリアン記法の何が悪いのでしょうか?

一般的に、ハンガリアン記法は時代遅れになっています。強く型付けされた言語では、特にSystems Hungarian型では、広く冗長です。また、コードが読みにくくなる可能性もあります。解決に役立つ可能性のある問題は、グローバル変数への過度の依存など、より深刻な欠陥の兆候であることがよくあります

Apps Notationはもっとうまくいくように見えますが、このバージョンでさえその批判者がいます。目的に関する情報は依然として変数の型の一部である必要があるという良い議論があります。

ユーザー定義の型またはクラスをサポートする言語は、通常、同じ目的をより良い方法で達成できます。変数にusNameという名前を付けても、安全性は高まりません。ただし、 UnsafeStringという名前のクラスを作成すると、コンパイラは変数の型をチェックできます。

ハンガリアン記法を使用する必要がありますか?

最終的に、その選択はあなた次第です。あなたがより大きなチームで働いているなら、誰かがおそらく決定を下すでしょう、そして誰もがそれに沿って行くべきです。独自のコードを作成している場合は、上記の引数に基づいて決定できます。

ただし、ハンガリアン記法の発端となったMicrosoftからの最新のアドバイスに注意することをお勧めします。 2008年以降、彼らの一般的な命名規則には、次の簡単なメモが含まれています。

❌ハンガリアン記法は使用しないでください。