Frage

Diese Frage ist auf gute Beispiele der ungarischen Notation suchen, so können wir zusammen eine Sammlung von diesen bringen.

Edit: Ich bin damit einverstanden, dass die ungarische für Typen nicht notwendig ist, ich hoffe, für spezifischere Beispiele, bei denen es die Lesbarkeit und Wartbarkeit erhöht, wie Joel in seinem Artikel gibt (wie pro meine Antwort ).

War es hilfreich?

Lösung 2

Die inzwischen klassischen Artikel, wie in anderen ungarischen Stellen erwähnt, ist die von Joels Website:

http://www.joelonsoftware.com/articles/Wrong.html

Andere Tipps

Das Problem für gute Beispiele der ungarischen Notation mit fragt, ist, dass jeder seine eigene Vorstellung davon haben, was los ist ein gutes Beispiel aussieht. Meine persönliche Meinung ist, dass die beste ungarische Notation ist kein Ungarisch Notation . Die Bezeichnung wurde ursprünglich dazu gedacht, die beabsichtigte Verwendung von einer Variablen zu bezeichnen, anstatt seine Art, aber es ist in der Regel für Typ-Information, insbesondere für Form-Steuerelemente (zB txtFirstName für einen Text verwendet Feld für Vornamen jemand.). Dies macht den Code weniger wartbar, in Bezug auf die Lesbarkeit (zB „prepIn nounTerms prepOf nounReadability“) und Refactoring für, wenn der Typ geändert werden muss (es gibt „lParams“ in der Win32-API, die Art geändert haben).

Sie sollten wahrscheinlich betrachten es überhaupt nicht verwenden. Beispiele:

  • strFirstName - das kann nur sein, vorName , da es offensichtlich ist, was es ist, die Art ist nicht so wichtig und sollte in diesem Fall offensichtlich. Wenn nicht offensichtlich ist, kann der IDE Ihnen dabei helfen.
  • txtFirstName - das kann sich ändern FirstNameTextBox oder FirstName_TextBox . Es liest sich besser, und Sie wissen, dass es eine Kontrolle und nicht nur den Text.
  • CAccount - C wurde für Klassennamen in MFC verwendet, aber Sie wirklich nicht brauchen. Konto ist gut genug. Der Großname ist die Standardkonvention für Typen (und sie nur an bestimmten Orten erscheinen, so dass sie nicht mit Eigenschaften oder Methoden verwirrt werden)
  • ixArray (Index array ) - ix ist ein bisschen dunkel. Versuchen Sie Arrayindex .
  • US State (unsicherer String für Staat ) - sieht aus wie "US-Staat". Besser geht mit state_UnsafeString oder so etwas. Vielleicht sogar wickeln Sie es in ein UnsafeString Klasse zumindest, um es typsicher.

p

(für Zeiger). Sein ziemlich der einzige Präfix ich verwende. Ich denke, dass es eine Menge zu einer Variablen hinzufügt (zB, dass ihr ein Zeiger) und so sollte ein wenig mehr Respekt behandelt werden.

Ungarisch für Datentypen ist etwas passe jetzt IDEs kann Ihnen sagen, was die Art (in nur wenigen Sekunden über den Variablennamen schweben) ist, so ist es nicht so wichtig. Aber die Behandlung einen Zeiger, als ob seine Daten nicht gut ist, so dass Sie wollen sicherstellen, dass es für den Benutzer offensichtlich ist, was es ist, selbst wenn er Annahmen macht er nicht sollte bei der Codierung.

t

Tainted Daten. Präfix alle Daten von einer nicht vertrauenswürdigen Quelle ankommend, um diese Variable zu machen als verdorben. Alle verdorbenen Daten bereinigt werden sollten, bevor eine wirkliche Arbeit auf es gemacht wird.

Es ist sinnlos Ungar zu verwenden Typen, um anzuzeigen, da der Compiler bereits erledigt das für Sie.

Wo ungarische nützlich ist, ist zwischen logisch verschiedenen Arten von Variablen zu unterscheiden, die denselben rohen Typen haben. wenn Sie Ints Zum Beispiel werden unter Verwendung von Koordinaten darstellen, könnten Sie x-Koordinaten mit x Präfix, y-Koordinaten mit y und Abstände mit d. Also würden Sie Code haben, der wie folgt aussieht

dxHighlight = xStart - xEnd

yHighlight = yLocation + 3

yEnd = yStart + dyHeight

dyCode = dyField * 2

und so weiter. Es ist nützlich, weil Sie Fehler auf einen Blick erkennen können: Wenn Sie einen dy zu einem y hinzufügen, können Sie immer eine y erhalten. Wenn Sie zwei X subtrahieren erhalten Sie immer einen dx. Wenn Sie eine dy mit einem Skalar multiplizieren, erhalten Sie immer einen dy. Und so weiter. Wenn Sie sehen, eine Zeile wie

yTop = dyText + xButton

wissen Sie auf einen Blick, dass es falsch ist, weil ein dy Hinzufügen und ein x ist nicht sinnvoll. Der Compiler konnte nicht, weil so weit für Sie fangen, wie es sagen kann, erhalten Sie einen int in einen int hinzufügen, die in Ordnung ist.

Verwenden Sie sprachspezifische Präfixe nicht.

Wir verwenden:

n: Number 
p: Percentage 1=100% (for interest rates etc)
c: Currency
s: String
d: date
e: enumeration
o: object (Customer oCustomer=new Customer();)
...

Wir verwenden das gleiche System für alle Sprachen:

SQL
C
C#
Javascript
VB6
VB.net
...

Es ist ein Lebensretter.

Der Advokat des Teufels: Das beste Beispiel für ungarische Notation ist es nicht zu benutzen. : D

Wir gewinnen keinen Vorteil bei der Verwendung ungarische Notation mit modernen IDEs, weil sie die Art kennen. Es fügt der Arbeit, wenn für eine Variable einen Typ Refactoring da der Name auch (und die meiste Zeit, wenn Sie mit einer Variablen handelt Sie wissen, welche Art es ist sowieso) geändert werden hätte.

Sie können auch in der Bestellung Probleme mit der Schreibweise erhalten. Wenn Sie p für Zeiger und eine für die Adresse verwenden, nennen Sie Ihre Variable apStreet oder paStreet? Ablesbarkeit vermindert, wenn Sie keine Konsistenz haben, und Sie müssen wertvollen Geist Raum verwenden, wenn Sie den Auftrag erinnern, dass Sie die Schreibweise in schreiben.

Ich finde ungarische Notation kann manchmal nützlich sein, in dynamischen Sprachen. Ich denke speziell von Server Side Actionscript (im Wesentlichen nur JavaScript), aber es könnte an anderer Stelle anzuwenden. Da gibt es überhaupt keine wirklichen Typinformationen ist, kann ungarische Notation manchmal helfen, ein bisschen leichter machen Dinge zu verstehen.

Der einzige Ungar, der mehr wirklich nützlich ist, ist m_ für Membervariablen. (I auch SM_ für statische Elemente zu verwenden, denn das ist die „andere“ scope die noch vorhanden ist.) Mit Widescreen-Monitore und Compiler, die Acht-Milliarden-Zeichen lange Variablennamen nehmen, geben Sie Namen abzukürzen nur ist es nicht wert.

ungarische Notation (Kamel Gehäuse, wie ich es gelernt) ist von unschätzbarem Wert, wenn Sie ein Software-Projekt sind vererben.

Ja, Sie können ‚schweben‘ über eine Variable mit IDE und finden Sie heraus, welche Klasse es ist, aber wenn man mehrere tausend Zeilen Code Paging sind durch Sie nicht wollen, für die wenigen Sekunden zu stoppen haben - jeder .... Einzel .... Zeit ....

Denken Sie daran - Sie schreiben nicht-Code für Sie oder Ihr Team alleine. Sie sind auch für die Person zu schreiben, die 2-5 Jahre auf der Straße diesen Code abholen muss und es zu verbessern.

ich stark gegen ungarische Notation war, bis ich wirklich darüber begann zu lesen und zu versuchen, es ist ursprüngliche Absicht zu verstehen.
Joels Post „Wrong“ und den Artikel „Rediscovering ungarische Notation“ Ich änderte wirklich meine Meinung nach der Lektüre. Geschehen richtig ich glaube es muss extrem leistungsfähig sein.

Wrong von Joel Spolsky
http://www.joelonsoftware.com/articles/Wrong.html

Rediscovering ungarische Notation
http://codingthriller.blogspot.com/2007/11/rediscovering- ungarisch-notation.html

Ich glaube, dass die meisten Naysayers nie versucht haben, es für real und nicht verstehen, ist es wirklich. Ich würde es gerne in einem realen Projekt auszuprobieren.

ich glaube, das Wichtigste von Joels Artikeln wegzunehmen oben verbunden, und die ungarischen Notation in der Regel wird es zu benutzen, wenn es etwas nicht offensichtlich über die Variable ist.

Ein Beispiel aus dem Artikel, vs nicht kodierten Strings codiert wird, ist es nicht, dass Sie ungarische verwenden sollten ‚uns‘ für unsichere Strings und ‚s‘ für die sichere Strings, es ist, dass Sie sollten einige Kennung, um anzuzeigen, dass ein String entweder sicher ist oder nicht. Wenn es Standard ist, wird es einfach, zu sehen, wenn der Standard gebrochen wird.

m

Wenn ein ORM (wie Hibernate) unter Verwendung neigen Sie dazu, verwaltete und nicht verwaltete Objekte zu behandeln. Ändern eines verwalteten Objekts in der Datenbank reflektiert werden, ohne dass eine explizite speichern aufrufen, während sie mit einem managaged Objekt handelt Aufruf speichern eine explizite erfordert. Wie Sie mit dem Objekt beschäftigen wird anders sein, je nachdem, welche es ist.

Ich finde, dass der einzige hilfreich Punkt ist, wenn Schnittstelle Kontrollen erklärt, txtUsername, TxtPassword, ddlBirthMonth. Es ist nicht perfekt, aber es hilft bei großen Formen / Projekten.

ich verwende es nicht für Variablen oder andere Gegenstände, gerade steuert.

Neben der Verwendung von ‚p‘ für Zeiger, ich mag die Idee der Verwendung von ‚cb‘ und ‚CCH‘, um anzuzeigen, ob ein Puffergrößenparameter (oder Variable) eine Anzahl von Bytes oder eine Zeichenzahl (ich habe auch gesehen - selten - ‚ce‘ verwendet, um eine Anzahl von Elementen angeben). Anstatt also Art von Förder, das Präfix vermittelt Verwendung oder Vorsatz.

Ich gebe zu, ich habe nicht das Präfix so konsequent wie ich wahrscheinlich soll, aber Ich mag die Idee.

Ich bin damit einverstanden, dass die ungarische Schreibweise nicht mehr besonders geeignet. Ich dachte, dass seine ursprüngliche Absicht nicht Datentyp, um anzuzeigen, sondern vielmehr Entitätstyp. In einem Code-Abschnitt die Namen der Kunden, Mitarbeiter und der Anwender beispielsweise beteiligt, könnten Sie lokale String-Variablen cusName, EmpName und usrname nennen. Das würde helfen, unter ähnlich klingenden Variablennamen zu unterscheiden. Die gleichen Präfixe für die Entitäten würden in der gesamten Anwendung verwendet werden. Wenn jedoch OO verwendet wird, und Sie sind den Umgang mit Objekten, sind diese Präfixe redundante in Customer.Name, Employee.Name und User.Name.

Der Name der Variablen sollte beschreiben, was es ist. Good variable Namensgebung ungarische Notation nutzlos macht.

Aber manchmal würde man ungarische Notation neben gute Variablennamen verwenden. m_numObjects hat zwei "Präfixe:" m_ und num. m _ gibt den Umfang: es ist ein Datenelement gebunden an diese . num gibt an, was den Wert ist .

Ich fühle mich überhaupt nicht behindert, wenn ich „gut“ Code lesen, auch wenn es einige nicht enthält „Ungar.“ Rechts: Ich las Code, ich klicken, um es nicht. (In der Tat, ich meine Maus so gut wie nie benutzen, wenn Codierung, oder bei einer Voodoo-Programmierung spezifischer Lookup-Funktionen.)

ich verlangsamt bin, wenn ich Dinge wie m_ubScale lesen (, ja, ich freue mich auf Dich, Liran! ), wie ich bei der Nutzung sehen (keine Kommentare!), Um herauszufinden, was es skaliert (wenn überhaupt?) und es ist Datentyp (das ist ein fester Punkt char sein geschieht). Ein besserer Name wäre m_scaleFactor oder m_zoomFactor sein, mit einem Kommentar als Festpunktzahl oder sogar ein typedef. (In der Tat wäre ein typedef nützlich sein, da es mehrere andere Mitglieder mehrerer Klassen sind, die das gleiche Festkommaformat verwenden. Allerdings einige dies nicht tun, sind aber immer noch m_ubWhatever markiert! Verwirrend, gelinde gesagt.)

Ich denke, ungarische gemeint war, ein Additiv zu dem Variablennamen sein, kein Ersatz für Informationen. oft ungarische Notation ergänzt die Lesbarkeit der Variablen, gar nichts Bytes verschwenden und Lesezeit auch.

Just my 2 ¢.

Eine sehr alte Frage, aber hier ist ein paar „ungarische“ Präfixe ich regelmäßig verwenden:

  

mein

     

für lokale Variablen zu unterscheiden, Ort, wo der Name könnte Sinn in einem globalen Kontext machen. Wenn Sie myFoo sehen, ist es nur in dieser Funktion verwendet werden, unabhängig davon, etwas, was wir tun, mit Foos anderswo.

myStart = GetTime();
doComplicatedOperations();
print (GetTime() - myStart);

und

  

tmp

     

für temporäre Kopien von Werten in Schleifen oder mehrstufigen Operationen. Wenn Sie zwei tmpFoo Variablen sehen mehr als ein paar Zeilen voneinander, sind sie fast sicher in keinem Zusammenhang.

tmpX = X; 
tmpY = Y;
X = someCalc(tmpX, tmpY);
Y = otherCalc(tmpX, tmpY);

und manchmal alt und neue in ähnlichen Gründen auf tmp , in der Regel in mehr Schleifen oder Funktionen.

ich je nur p für einen Zeiger verwenden, und das ist es. Und das ist nur, wenn ich in C ++ bin. In C # verwende ich keine ungarische Notation. z.

MyClass myClass;
MyClass* pMyClass;

Das ist alles:)

Edit: Oh, ich erkennen, dass eine Lüge. Ich benutze „m_“ für zu Membervariablen. z.

class
{
private:
bool m_myVar;
}

Nun, ich benutze es nur mit Fenstern Kontrollvariablen. Ich benutze btn_, txt_, lbl_ etc, sie zu entdecken. Ich kann es auch hilfreich die Kontrolle des Namen nachzusehen durch seine Art der Eingabe (btn_ usw.).

Es gibt nicht so etwas wie ein gutes Beispiel für ungarische Notation. Nur nutzen sie nicht. Nicht einmal, wenn Sie eine schwach typisierte Sprache verwenden. Sie werden glücklicher leben.

Aber wenn Sie wirklich einen Grund brauchen sie nicht zu verwenden, das ist mein Favorit, extrahiert aus diese großer Link :

Ein Followon Trick in der ungarischen Notation ist „um den Typ einer Variablen ändern, aber den Variablennamen unverändert lassen“. Dies ist fast immer in Windows getan apps mit der Migration von Win16: - WndProc (HWND hw, WORD WMSG, WORD wParam, LONG lParam) auf Win32 WndProc (HWND hw, UINT WMSG, WPARAM WParam, LPARAM lParam), wo die w-Werte deuten dass sie sind Worte, aber sie wirklich sehnt sich beziehen. Der wahre Wert dieses Ansatzes kommt klar mit der Win64-Migration, wenn die Parameter 64 Bit breit sein, aber die alten „w“ und „l“ Präfixe werden für immer bleiben.

Ich finde mich mit ‚w‘ bedeutet ‚Arbeit‘, als Präfix anstelle von ‚Temp‘ oder ‚tmp‘, für lokale Variablen, die sich um nur dort zu Jockey Daten sind, wie:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top