Eric Lippertの記事「What's Up With Hungarian Notation?」、彼はハンガリー記法(良い種類)の目的は
ストレージ表現情報に加えてセマンティック情報を含むように「タイプ」の概念を拡張します。
簡単な例は、X座標を表す変数の前に「x」を、Y座標を表す変数の前に「y」を付けることです。これらの変数は整数か浮動小数点かどうかに関係なく、xFoo + yBar
、コードは明らかに間違っています。
しかし、私はHaskellの型システムについても読んでおり、Haskellでは、コンパイラがチェックする実際の型を使用して同じことを達成できるようです(つまり、「型の概念を拡張して意味情報を含む」)。したがって、上記の例ではxFoo + yBar
、プログラムを正しく設計すると、Haskellで互換性のない型として宣言されるため、実際にコンパイルに失敗します。つまり、Haskellの型システムは、ハンガリー語表記と同等のコンパイル時チェックを効果的にサポートしているようです。
それでは、ハンガリー記法は、型システムが意味情報をエンコードできないプログラミング言語の単なるバンドエイドなのでしょうか?または、ハンガリー記法は、Haskellのような静的型システムが提供できる以上のものを提供しますか?
(もちろん、私はHaskellを例として使用しています。他の言語も同様に表現力豊かな(リッチ?ストロング?)型システムを備えていると確信していますが、私はまったく遭遇していません。
明確にするために、私はしていないと、変数名に注釈を付けるの話データタイプではなく、に関する情報を意味プログラムのコンテキスト内の変数の。たとえば、変数は整数、浮動小数点、倍精度、長整数などの場合がありますが、変数の意味は、インチ単位で測定される相対x座標であることです。これは、ハンガリー記法(およびHaskell型)を介したエンコードについて話している種類の情報です。