MFC には、C で始まるすべてのクラス名があります。たとえば、CFile や CGdiObject などです。誰かがそれが他の場所で使用されているのを見たことがありますか? このスタイルを推奨する Microsoft の公式命名規則ガイドはありますか? アイデアは MFC で生まれましたか、それとも他のプロジェクトでしたか?
12 に答える
それは悪です。抽象化されたもの以外にはハンガリー記法を使用しないでください。
たとえば、btnSubmit
Submit という名前のボタンを記述しても問題ありません (lblSubmit
ボタンの横にあるラベルに付随するものがあります)。
しかしCMyClass
、Class やuiCount
count という名前の符号なし整数のようなものは、プログラマーの役に立たず、余分な無駄な入力につながるだけです。
少し似たものが Symbian C++ で使用されており、その規則は次のとおりです。
T クラスは「値」です。たとえば、TChar、TInt32、TDes です。
R クラスは、RFile、RSocket などのカーネル (またはその他の) リソースへのハンドルです。
M クラスは mixin であり、インターフェイスを含みます (関数実装のない mixin として解釈されます)。ガイドラインでは、多重継承には最大で 1 つの非 M クラスを含める必要があります。
C クラスは他のほとんどすべてのものであり、CBase から派生します。CBase には、リソース処理に役立つものが含まれています。
HBufC は、主に Symbian フォーラムで混乱した投稿を生成するために存在し、独自のプレフィックスを持つことは始まりにすぎません。H は「ハァッ?」、または「ハァ、ハァ! STL がない!」の略です。;-)
これは、Systems Hungarian Notation というよりも Apps Hungarian Notation に精神的に近いものです。接頭辞は、ドキュメントで調べることができるクラスについて何かを教えてくれますが、それ以外の場合はわかりません。プログラミングで何かに名前を付けるポイントは、そのようなヒントやリマインダーを提供することです。それ以外の場合は、クラスを「Class001」、「Class002」などと呼ぶだけです。
Systems Hungarian は変数の型を教えてくれるだけで、特に C++ のような言語では、型が絶えず繰り返されるか、テンプレート パラメーターによって完全に隠される傾向があるため、IMO はそれほど興奮する必要はありません。型に名前を付けるときの類似物は、すべてのインターフェイスに I を使用して名前を付けるという Java の慣例です。繰り返しますが、私はこれについてあまり興奮していません (標準の Java ライブラリも同様です)。ただし、すべてのクラスにインターフェイスを定義する場合は、 、テスト以外の状況でポリモーフィズムに実際に使用されるインターフェースに加えて、2つを区別する何らかの方法が必要です。
これは古い C++ コーディング スタイルであり、MFC はおそらくそれを使用する最後のものの 1 つでした。
これは通常、C++ (およびおそらく他のいくつかの言語) の慣習にすぎませんでした。そのため、COM や .NET を通じて言語の相互運用性が高まるにつれて、支持されなくなり始めました。
いまだに、インターフェースの「I」接頭辞のいとこをよく見かけます。"C" が死んでも "I" が生き残ったのは興味深いことだといつも思っていましたが、それはおそらく、COM の相互運用性においてインターフェイスが非常に頻繁に使用されていたためです。
Borland コンパイラには、クラス名が「T」で始まるライブラリが付属していたことを覚えています。おそらく「タイプ」のためです:)
すべての質問にお答えすることはできませんが、私の知る限り、これは MFC クラスを他のクラスと区別するためのものであり、ハンガリー記法の一形態です。
興味深いことに、MS の外部だけでなく内部でも物議を醸しているようです。
何年も前の命名規則は、クラス、タイプ、さらにはクラスのグループ化を識別するのに役立ちます。当時は名前空間がなく、インテリセンスが利用できなかったことを忘れないでください。C はハンガリー語表記の形式ですが、MFC によって確実に普及しました。Borland と Delphi は T - を Type の接頭辞として使用していました
Windows 用に作成された MFC や多くのソフトウェアではクラスに "C" 規則が使用されていましたが、通常、UNIX プラットフォーム用に作成されたソフトウェアでは後者は見られません。これは、Visual C++ によって強く奨励された習慣だったと思います。Visual C++ 6.0 では、クラス ウィザードで作成されたすべてのクラスに "C" というプレフィックスが付けられていたことを覚えています。
この問題に関する長い記事については、http ://www.jelovic.com/articles/stupid_naming.htm を参照してください。
このような変数の規則は、変数を使用する前に変数の型を宣言する必要がない Fortran などの言語で役立ちます。名前が「i」または「j」で始まる変数はデフォルトで整数になり、名前が「r」およびその他の文字で始まる変数はデフォルトで実数(浮動)値になったことを思い出したようです。
変数を宣言する必要がある言語、またはクラス定義に対して人々が同様のものを使用するのは、おそらく、Fortran などの言語の古いコード規則を実際に重要な場所で誤解したことの遺物です。
Qt ライブラリを使用するアプリケーションを作成する場合、QObject から直接的または間接的に派生したクラスとそうでないクラスを区別する命名規則を使用します。これは、クラス名から、シグナル/スロット、プロパティ、および QObject に由来するその他すべての機能をサポートしているかどうかを判断できるため、便利です。
他の多くの命名規則と同様に、仕事で使用します
多くの場合、クラスには C、ポインターには p、メンバーには m_、静的メンバーには s_、整数には n を意味していました...多くのドキュメントはありません