13

まず、重複した質問を避けるために、次の投稿を確認しました。

https://stackoverflow.com/questions/1184717/hungarian-notation
「ハンガリー表記法」を使用すべきではないのはなぜですか?
変数の接頭辞 (「ハンガリー表記」) は本当に必要ですか?
人々は現実世界でハンガリーの命名規則を使用していますか?

現在、これらの投稿はすべて、C#、C++、Java (厳密に型指定された言語) に関連しています。
コンパイル前に型がわかっている場合、プレフィックスは必要ないことを理解しています。
それにもかかわらず、私の質問は次のとおりです。

実行前にオブジェクトのタイプを確認できないという事実を考慮して、インタープリターベースの言語でプレフィックスを使用する価値はありますか?

編集: 誰かがこの投稿をコミュニティ wiki にできる場合は、そうしてください。この投稿からの評判(または否定的な評判)にはほとんど興味がありません。

4

5 に答える 5

20

2 つのバージョンのどちらを参照するかによって異なります。

  • 「本物の」元のハンガリー語表記を使用したい場合は、アプリケーション ハンガリー語表記で、論理変数の型 resp を示します。その目的は、自由に行ってください。

  • OTOH、「誤解された」バージョン AKA Systems Hungarian 記法であり、物理変数の型だけが嫌われており、使用すべきではありません。

于 2012-01-09T16:28:46.123 に答える
12

IMHO、Systems Hungarian (データ型の接頭辞) を使用することは (*) 決して意味がありません。静的言語または動的言語のいずれかを使用しますが、コンパイラまたはインタープリターの両方で型システムを処理します。変数名を使用して変数の型に注釈を付けることは、あいまいさを引き起こすだけです (たとえば、float という名前を想像してくださいintSomething)。

Application Hungarian に関しては完全に異なります。つまり、ある種の使用パターンをプレフィックスとして付けます。安全でない (つまり、検証されていない) 値には「usValue」など、この種の表記法を使用することをお勧めします。これにより、使用法に関する視覚的な手がかりが得られ、同じ型を持つが一緒に使用することを意図していない変数の異なる使用法を混在させることができなくなります (または、一緒に使用することを意図している場合は、少なくとも次のような考えがあります)。使用されているものに影響を与え、コード チェック レーダーにブリップを生成します)。

私は MATLAB でこのようなことを頻繁に使用idxInterestします。たとえば、double の配列が生のデータ値ではなく、何らかの形で関心のある (別の配列への) インデックスであることを示す場合などです。私は定期的にselInterest( selfrom select) を使用して、論理インデックスで同じことを行います (これはボーダーラインのシステム ハンガリー語のように見えるかもしれません) が、多くの場合、両方を同じコンテキストで使用できます。

イテレータについても同様です: 私は定期的に多次元配列 (4D など) を使用します。奇妙なケースでは(par)for、次元に対して a を実行します。イテレータはiFoo, jBar,と呼ばれますが、kBaz上限は一般nFooに...)。より複雑なインデックス操作を行う場合、どのインデックスがどのディメンションに属しているかを簡単に確認できます (プレフィックスによって、どの数値ディメンションが使用されているかがわかります。完全な名前によって、そのディメンションが何を表しているかがわかります)。これにより、コードがはるかに読みやすくなります。nBarnBaznumFoo

その次に、私は定期的にdFoo=1;, dBar=2;, ... を使用して、特定の変数セットの次元数を示します。そうすれば、次のようなものはs のmeanIncome = mean(income, dBar)平均incomeをとりますが、同じ情報を伝えていないことが簡単にわかります。変数も設定する必要があるため、変数のドキュメントとしても機能します。BarmeanIncome = mean(income, 2)d

iFoo + jBarまたはのようなことを行うことは技術的には正しくありませkBaz + dBarんが、これらがコード内で発生するといくつかの問題が発生し、その部分をより注意深く検査することができます。そして、それこそが本当の (アプリケーション) ハンガリー記法です。

(*) それが意味を成す唯一の瞬間は、完全なフレームワーク/言語がそれを使用するように要求する場合です。たとえば、win32 API はそれを使用するため、それと直接やり取りする場合は、これらの標準を使用して混乱を最小限に抑える必要があります。ただし、別のフレームワーク/言語を探すことは、それと同じかそれ以上に理にかなっているかもしれないと私は主張します。

これは、Perl や一部の BASIC 方言などで使用されるsigilとは異なることに注意してください。これらも型を伝達しますが、多くの実装では、これは型定義であるため、あいまいさはまったくまたはほとんどありません。その種の型宣言を使用することが良い習慣であるかどうかは、別の問題です (そして、これに対する私自身のスタンスについてはよくわかりません)。

于 2012-01-09T19:49:59.993 に答える
9

Python で型を伝えるハンガリー語表記法 (「システム ハンガリー語」) が嫌われている理由は単純です。誤解を招きます。変数を呼び出すこともできますiPhones(整数の電話番号、おそらく :-) が、これは Python であるため、整数以外のものを変数に入れることを妨げるものは何もありません! そして、何らかの理由でそれを行う必要があることに気付くかもしれません。そして、それを使用するすべてのコードは、もちろん変数の名前をグローバルに変更しない限り、それを理解しようとする人にとって非常に誤解を招くものです.

この表記法は、静的に型付けされた言語で変数の型を追跡するのに役立つことを目的としており、間違いなく一時的に役立ちました。しかし、静的に型付けされた言語であっても、はるかに優れた方法でジョブを実行する IDE が利用できるようになったため、現在は廃止されています。

于 2012-01-09T18:24:53.170 に答える
3

提案されたように、ハンガリー語表記は合理的な考えです。そのまま適用された?軌道から核爆弾を発射する必要があります(これが確実な唯一の方法です)。

于 2012-01-09T16:33:27.590 に答える
2

リンク先の最初の質問から受け入れられた回答は、Pythonにも同じように適用されます。

ハンガリアン記法はJavaにはありません。Java APIはそれを使用せず、ほとんどの開発者も使用しません。Javaコードは、それを使用するJavaのようには見えません。

これはすべてPythonにも当てはまります。

于 2012-01-09T16:19:23.243 に答える