IMHO、Systems Hungarian (データ型の接頭辞) を使用することは (*) 決して意味がありません。静的言語または動的言語のいずれかを使用しますが、コンパイラまたはインタープリターの両方で型システムを処理します。変数名を使用して変数の型に注釈を付けることは、あいまいさを引き起こすだけです (たとえば、float という名前を想像してくださいintSomething
)。
Application Hungarian に関しては完全に異なります。つまり、ある種の使用パターンをプレフィックスとして付けます。安全でない (つまり、検証されていない) 値には「usValue」など、この種の表記法を使用することをお勧めします。これにより、使用法に関する視覚的な手がかりが得られ、同じ型を持つが一緒に使用することを意図していない変数の異なる使用法を混在させることができなくなります (または、一緒に使用することを意図している場合は、少なくとも次のような考えがあります)。使用されているものに影響を与え、コード チェック レーダーにブリップを生成します)。
私は MATLAB でこのようなことを頻繁に使用idxInterest
します。たとえば、double の配列が生のデータ値ではなく、何らかの形で関心のある (別の配列への) インデックスであることを示す場合などです。私は定期的にselInterest
( sel
from select) を使用して、論理インデックスで同じことを行います (これはボーダーラインのシステム ハンガリー語のように見えるかもしれません) が、多くの場合、両方を同じコンテキストで使用できます。
イテレータについても同様です: 私は定期的に多次元配列 (4D など) を使用します。奇妙なケースでは(par)for
、次元に対して a を実行します。イテレータはiFoo
, jBar
,と呼ばれますが、kBaz
上限は一般nFoo
に...)。より複雑なインデックス操作を行う場合、どのインデックスがどのディメンションに属しているかを簡単に確認できます (プレフィックスによって、どの数値ディメンションが使用されているかがわかります。完全な名前によって、そのディメンションが何を表しているかがわかります)。これにより、コードがはるかに読みやすくなります。nBar
nBaz
numFoo
その次に、私は定期的にdFoo=1;
, dBar=2;
, ... を使用して、特定の変数セットの次元数を示します。そうすれば、次のようなものはs のmeanIncome = mean(income, dBar)
平均income
をとりますが、同じ情報を伝えていないことが簡単にわかります。変数も設定する必要があるため、変数のドキュメントとしても機能します。Bar
meanIncome = mean(income, 2)
d
iFoo + jBar
またはのようなことを行うことは技術的には正しくありませkBaz + dBar
んが、これらがコード内で発生するといくつかの問題が発生し、その部分をより注意深く検査することができます。そして、それこそが本当の (アプリケーション) ハンガリー記法です。
(*) それが意味を成す唯一の瞬間は、完全なフレームワーク/言語がそれを使用するように要求する場合です。たとえば、win32 API はそれを使用するため、それと直接やり取りする場合は、これらの標準を使用して混乱を最小限に抑える必要があります。ただし、別のフレームワーク/言語を探すことは、それと同じかそれ以上に理にかなっているかもしれないと私は主張します。
これは、Perl や一部の BASIC 方言などで使用されるsigilとは異なることに注意してください。これらも型を伝達しますが、多くの実装では、これは型定義であるため、あいまいさはまったくまたはほとんどありません。その種の型宣言を使用することが良い習慣であるかどうかは、別の問題です (そして、これに対する私自身のスタンスについてはよくわかりません)。