ハンガリー記法の目的は、他の方法では型システムでエンコードできない識別子に情報をエンコードすることです。私自身の意見では、この情報がエンコードするのに十分重要であれば、適切にチェックできる型システムでエンコードするのに十分重要だということです。そして、情報が重要でない場合、なぜそれでソースコードを乱雑にしたいのですか?
または、もっと簡潔に言うと、型情報は型システムに属します。(注:静的型システムである必要はありません。型エラーをキャッチする限り、いつキャッチするかは気にしません。)
他のいくつかの回答では、ハンガリーの表記法の許容可能な使用法として測定単位に言及しています。(NASA Mars Climate Orbiterについてはまだ誰も言及していなかったので、ハンガリー記法についての議論で常に浮かび上がってきているように思えるので、ちょっと驚いています)。
F#の簡単な例を次に示します。
[<Measure>] type m
[<Measure>] type ft
let someLength = 48.15<m>
let someOtherLength = 16.2342<ft>
someLength + someOtherLength
// someLength + someOtherLength
// -------------^^^^^^^^^^^^^^^
// error FS0001: The unit of measure 'ft' does not match the unit of measure 'm'.
見て、馬、ハンガリー人じゃない!
私がした場合だった代わりに、ここではタイプのハンガリー語表記法を使用することは私に1ビットを助けないだろう。
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
コンパイラはそれをそのまま通しました。私は今、本質的にタイプエラーであるものを見つけるために人間に頼っています。それは型チェッカーの目的ではありませんか?
さらに良いことに、Frinkプログラミング言語を使用します。
someLength = 48.15m
someOtherLength = 16.2342ft
someLength + someOtherLength
// 53.09818416 m (length)
// Wanna know the answer in a good old fashioned American unit?
someLength + someOtherLength -> yd
// 58.06888031496062992
// Are you an astrophysicist?
someLength + someOtherLength -> parsec
// 1.7207949554318336148e-15
// ... or a fundmentalist Christian who refuses to use units invented
// less than 2000 years ago?
someLength + someOtherLength -> biblicalcubits
// 95.893563822870765006
要約すると、私はハンガリー記法が好きではありません。絶対に使用しないでください。
そうは言っても、ハンガリー記法を使用するのは良い考えだと思います。待って、何?
はい!この特定のケースでは、あなたは言及しました:
さらに、ほとんどのコードは、boolやfloatなどの概念が存在しない、変なDSPで実行する必要があります
しかし、それはまさにハンガリー記法の賢明なユースケースです!
PS:Frinkを見ることを心からお勧めします。そのマニュアルには、これまでで最も素晴らしいおならジョークのいくつかが含まれています。また、かなりクールな言語です:-)