ハンガリー記法の良い例? [閉まっている]
-
03-07-2019 - |
質問
この質問は、ハンガリー記法の良い例を探すことです。そのため、これらのコレクションをまとめることができます。
編集:型のハンガリー語はそれほど必要ではないことに同意します。Joelが彼の記事で述べているように、読みやすさと保守性を高める具体的な例を望んでいます(私の答えによると) )。
解決 2
他のハンガリーの記事で言及されているように、今では古典的な記事はジョエルのサイトからのものです:
他のヒント
ハンガリー記法の良い例を求める問題は、誰もが良い例がどのように見えるかについて自分の考えを持っているということです。私個人の意見では、最高のハンガリー語表記はハンガリー語ではない表記。表記法は元々、変数の型ではなく、意図された使用法を示すためのものでしたが、通常は型情報、特にフォームコントロール(たとえば、テキストの txtFirstName 誰かの名前のボックス。)。これにより、読みやすさ(例:" prepIn nounTerms prepOf nounReadability")およびタイプを変更する必要がある場合のリファクタリング(Win32 APIにはタイプが変更された" lParams")に関して、コードの保守性が低下します。 / p>
おそらくまったく使用しないことを検討する必要があります。例:
- strFirstName -目的が明らかであるため、これは単に firstName になります。タイプはそれほど重要ではなく、この場合に明白になるはずです。明らかでない場合は、IDEがそれを支援します。
- txtFirstName -これは FirstNameTextBox または FirstName_TextBox に変更できます。読みやすく、テキストだけでなくコントロールであることがわかります。
- CAccount -MFCではクラス名に C が使用されていましたが、実際には必要ありません。 アカウントで十分です。大文字の名前は、型の標準的な規則です(特定の場所にのみ表示されるため、プロパティやメソッドと混同しないようにします)
- ixArray ( array のインデックス)-
ix
は少しあいまいです。 arrayIndex を試してください。 - usState ( State の安全でない文字列)-" U.S。州」。 state
_
UnsafeString などを使用することをお勧めします。少なくともタイプセーフにするために、 UnsafeString クラスでラップすることもできます。
p
(ポインタ用)。そのほとんどが私が使用する唯一のプレフィックスです。私はそれが変数に多くのことを追加すると思うので(例えば、そのポインター)、それでもう少し丁重に扱われるべきです。
データ型のハンガリー語はやや過ぎており、IDEは型が何であるかを(変数名の上にホバリングして数秒で)伝えることができるため、それほど重要ではありません。しかし、ポインターをそのデータが良くないかのように扱うので、ユーザーがコーディング時に想定してはならないことを仮定したとしても、それがユーザーに明らかであることを確認したいのです。
t
汚染データ。信頼できないソースから着信するすべてのデータにプレフィックスを付けて、その変数を汚染された状態にします。汚染されたデータはすべて、実際の作業を行う前にクリーンアップする必要があります。
ハンガリー語を使用して型を示すのは意味がありません。コンパイラが既にそれを行っているからです。
ハンガリー語が役立つのは、同じ生の型を持つ論理的に異なる種類の変数を区別することです。たとえば、intを使用して座標を表す場合、x座標の前にx、y座標の前にy、距離の前にdを付けることができます。そのため、次のようなコードになります
dxHighlight = xStart-xEnd
yHighlight = yLocation + 3
yEnd = yStart + dyHeight
dyCode = dyField * 2
など。エラーが一目でわかるので便利です。yにdyを追加すると、常にyが得られます。 2つのxを減算すると、常にdxが得られます。 dyにスカラーを掛けると、常にdyになります。等々。次のような行が表示された場合
yTop = dyText + xButton
dyとxを追加しても意味がないため、間違っていることが一目でわかります。コンパイラは、わかる限りでは、intにintを追加しているので、これを捕捉できませんでした。
言語固有のプレフィックスを使用しないでください。
使用:
n: Number p: Percentage 1=100% (for interest rates etc) c: Currency s: String d: date e: enumeration o: object (Customer oCustomer=new Customer();) ...
すべての言語に同じシステムを使用しています:
SQL C C# Javascript VB6 VB.net ...
これは命の恩人です。
悪魔の擁護者:ハンガリー記法の最良の例は、それを使用しないことです。 :D
現代のIDEでハンガリーの表記法を使用しても、タイプがわかっているため、利点はありません。名前も変更する必要があるため、変数の型をリファクタリングするときに作業が追加されます(ほとんどの場合、変数を処理しているときはとにかく型がわかっています)。
また、表記法の順序付けの問題に入ることもできます。ポインターとアドレスにpを使用する場合、変数apStreetまたはpaStreetを呼び出しますか?一貫性がないと読みやすさが低下します。また、表記を記述する順序を覚える必要がある場合は、貴重なマインドスペースを使い果たす必要があります。
ハンガリーの表記法は、動的言語で役立つことがあります。私は特にServer Side Actionscript(基本的にはjavascript)について考えていますが、他の場所にも適用できます。実際の型情報はまったくないため、ハンガリーの表記法は物事を少し理解しやすくするのに役立ちます。
本当に便利な唯一のハンガリー語は、メンバー変数のm_です。 (静的メンバーにもsm_を使用します。これは、まだ存在する「その他」スコープです。)80億文字の変数名を使用するワイドスクリーンモニターおよびコンパイラーでは、型名を短縮するだけの価値はありません。
ソフトウェアプロジェクトを継承している場合、ハンガリー語表記(私が学んだようにキャメルケース)は非常に貴重です。
はい、IDEで変数を「ホバー」してクラスを調べることができますが、数千行のコードをページングしている場合、数秒間停止する必要はありません- every .... single .... time ....
覚えておいてください-あなたやあなたのチームのためだけにコードを書いているわけではありません。また、2〜5年後にこのコードを選択し、強化する必要がある人のために書いています。
ハンガリーの表記法について本当に読み始めて、それが本来の意図であると理解しようとするまで、私はハンガリー記法に強く反対していました。
Joelsの投稿「間違った」を読んだ後記事「Rediscovering Hungarian Notation」の記事。私は本当に考えを変えました。正解です。信じられないほど強力です。
間違っているby Joel Spolsky
http://www.joelonsoftware.com/articles/Wrong.html
ハンガリー語表記の再発見
http://codingthriller.blogspot.com/2007/11/rediscovering- hungarian-notation.html
私は、ほとんどのネイザイアーが実際にそれを試したことはなく、本当に理解していないと信じています。 実際のプロジェクトで試してみたいと思います。
上にリンクされているJoelの記事、および一般的にハンガリーの表記法から取り除く重要なことは、変数について明白でない何かがある場合にそれを使用することだと思います。
記事の1つの例は、エンコードされた文字列とエンコードされていない文字列です。安全でない文字列にはハンガリー語の「us」を使用し、安全な文字列には「s」を使用する必要はなく、 some 文字列が安全かどうかを示す識別子。標準になると、標準がいつ破られるかが簡単にわかります。
m
ORM(休止状態など)を使用する場合、管理対象オブジェクトと管理対象外オブジェクトを扱う傾向があります。管理対象オブジェクトの変更は、明示的な保存を呼び出さずにデータベースに反映されますが、管理対象オブジェクトの処理には明示的な保存呼び出しが必要です。オブジェクトの処理方法は、オブジェクトによって異なります。
唯一の有用なポイントは、インターフェイスコントロール、txtUsername、txtPassword、ddlBirthMonthを宣言する場合です。完璧ではありませんが、大きなフォーム/プロジェクトに役立ちます。
変数やその他の項目には使用せず、コントロールにのみ使用します。
ポインターに「p」を使用することに加えて、「cb」と「cch」を使用してバッファーサイズパラメーター(または変数)がバイト数か文字数(I'veまた、まれに-要素の数を示すために「ce」が使用されています)。したがって、タイプを伝える代わりに、接頭辞は使用または意図を伝えます。
認めますが、接頭辞を一貫して使用しているとは限りませんが、アイデアは気に入っています。
ハンガリーの表記法はもはや特に有用ではないことに同意します。元々の意図はデータ型ではなく、エンティティ型を示すことだと思いました。たとえば、顧客、従業員、ユーザーの名前を含むコードセクションでは、ローカル文字列変数にcusName、empName、usrNameという名前を付けることができます。これは、類似した音の変数名を区別するのに役立ちます。エンティティに対して同じプレフィックスがアプリケーション全体で使用されます。ただし、オブジェクト指向が使用され、オブジェクトを処理している場合、これらのプレフィックスはCustomer.Name、Employee.Name、およびUser.Nameで冗長です。
変数の名前はそれが何であるかを説明する必要があります。変数の命名が適切であれば、ハンガリー語の表記法は役に立たなくなります。
ただし、適切な変数の命名に加えてハンガリー語表記を使用する場合があります。 m_numObjectsには、2つの"プレフィックス:"があります。 m_およびnum。 m _ は範囲を示します。これは this に関連付けられたデータメンバーです。 num は、値 を示します。
「良い」を読んだとき、私はまったく邪魔されません。コードに「ハンガリー語」が含まれている場合でも。右:コードを読んで、クリックしません。 (実際、コーディング時にマウスを使用したり、ブードゥー教のプログラミング固有の検索機能を使用したりすることはほとんどありません。)
m_ubScale(はい、あなたを見ています、リラン!)のようなものを読むとき、私はその使用法(コメントなし!)を調べなければならないので遅くなります(もしあれば)スケーリングし、データ型です(これはたまたま固定小数点文字です)。より良い名前はm_scaleFactorまたはm_zoomFactorであり、固定小数点数としてのコメント、またはtypedefさえあります。 (実際には、同じ固定小数点形式を使用するいくつかのクラスの他のメンバーがいくつかあるため、typedefが役立ちます。しかし、一部はそうではありませんが、m_ubWhatever!とラベル付けされています。 / p>
ハンガリー語は、情報の代わりではなく、変数名に追加することを意図していたと思います。また、多くの場合、ハンガリー語表記は変数の可読性に何も追加せず、バイトと読み取り時間を無駄にします。 ちょうど私の2¢。
非常に古い質問ですが、ここにいくつかの「ハンガリー語」があります。私が定期的に使用するプレフィックス:
my
ローカル変数の場合、グローバルコンテキストで名前が意味をなす場所を区別します。 myFooが表示されている場合、他の場所でFoosを使用して行われていることに関係なく、この関数でのみ使用されます。
myStart = GetTime();
doComplicatedOperations();
print (GetTime() - myStart);
and
tmp
ループまたはマルチステップ操作の値の一時コピー用。 2つのtmpFoo変数が互いに数行以上離れている場合、それらはほとんど確実に無関係です。
tmpX = X;
tmpY = Y;
X = someCalc(tmpX, tmpY);
Y = otherCalc(tmpX, tmpY);
および場合によっては old および new で、 tmp と同様の理由で、通常は長いループまたは関数で。
私はポインタにpのみを使用していますが、それだけです。それは、私がC ++を使用している場合のみです。 C#では、ハンガリー記法を使用しません。 例:
MyClass myClass;
MyClass* pMyClass;
これですべて:)
編集:ああ、それは嘘だと気付いた。 " m_"を使用しますメンバー変数にも。例:
class
{
private:
bool m_myVar;
}
まあ、私はウィンドウ制御変数でのみそれを使用します。 btn_、txt_、lbl_などを使用してそれらを見つけます。また、タイプ(btn_など)を入力して、コントロールの名前を検索することも役立ちます。
ハンガリーの記法の良い例はありません。使用しないでください。弱く型付けされた言語を使用している場合でも。あなたは幸せに生きます。
しかし、あなたが本当にそれを使用しない何らかの理由が必要な場合、これは thisから抽出された私のお気に入りです素晴らしいリンク:
ハンガリー語の表記法では、「変数の型を変更し、変数名は変更しない」という方法があります。これは、Windowsアプリでほぼ常に行われます。Win16からの移行:-WndProc(HWND hW、WORD wMsg、WORD wParam、LONG lParam)からWin32 WndProc(HWND hW、UINT wMsg、WPARAM wParam、LPARAM lParam)彼らは言葉であるが、彼らは本当にロングを参照していること。このアプローチの本当の価値は、パラメーターが64ビット幅になるWin64移行で明らかになりますが、古い「w」はおよび「l」プレフィックスは永久に残ります。
次のように、データをジョッキーするためにあるローカル変数に対して、「temp」または「tmp」の代わりに「working」を接頭辞として「w」を使用していることに気づきました:
Public Function ArrayFromDJRange(rangename As Range, slots As Integer) As Variant
' this function copies a Disjoint Range of specified size into a Variant Array 7/8/09 ljr
Dim j As Integer
Dim wArray As Variant
Dim rCell As Range
wArray = rangename.Value ' to initialize the working Array
ReDim wArray(0, slots - 1) ' set to size of range
j = 0
For Each rCell In rangename
wArray(0, j) = rCell.Value
j = j + 1
Next rCell
ArrayFromDJRange = wArray
End Function