Bei der Ungarisches Notation Handelte es dich um Ein von Programmierern Verwenden Namenskonvention zur Wahl von Bezeichnern Amt für die variable und konstanten , Die Leistung und Methoden , Eulen other Objekts.
Empfehlung : Ihr Name Ungarische Notation sie in Einer (Englischen) Programmierbare Text exotisch anmutenden aussieht die Durch Bestimmt Regeln Zust gekommenen Bezeichner und der Ungarische Herkunft Ihres Erfinder verdankt stirbt Charles Simonyi . [1]
Der von Simonyi Entwickelt Konvention Würde bei Microsoft in der Application Group ( Microsoft Office ) mit großem Erfolg Angewandte und in der Folge von dem System Group ( Windows – ) übernommen, Wobei es zu Einem Grunde Legende Missverständnis Kamm. Simonyi breitet sich in seinem Papier vom „Typ“ einer Variables aus, wurde vielseitig „Datentype“ interpretiert. Gemeent ist vielmehr die Kunst der Variablen im spezifischen Kontext einer Applikation. Es geht auch nicht so sehr Daruma ob Eine Variable Ganzzahl oder Comma Zahl ist, ob es sich Sondern um EINEN Zahl Handelt, Eine Koordinaten Auf dem Bildschirm, EINEN Index in Einem Array o. Ä.
Durch this Zweideutigkeit existieren Zwei Ström Kind wo Ungarisches Notation, das Apps Ungarisch , Welches sterben echte Notation im Sinne Simonyis ist, und das System Ungarisch , Welches Durch Die Fehlinterpretation wo Microsoft’schen Betriebssystemabteilung Entstanden ist. Letzteres ist für Schlechter Ruf der Konvention, da die Benennung einer Variable nach dem Datentype sehr gering ist.
Kern der Ungarischen Notation ist, die Aufgabe und den Typ ( Apps Ungarisch ) bzw. nur Typ ( System Ungarisch ) Eine Variable (oder Methode) in diesen Namen Namen zu verdeutlichen.
Apps Ungarisch
Zusammenfassung eines Variablennamens
Charles Simonys ungarische Notation beschreibt die vollständigen Namen und Variablen. Wir wären gerne aussagekräftige Variablennamen, die ausschließen . var hilf: Integer;
Zu diesem Zweck ist klar definiert, welches Attribut ein Variablenname enthalten;
{ Präfix } { Datum } { Bezeichner }
Dazu wurden Präfix und Datentype geschrien, und die erste Buchstabe des Bezeichnners groß. Der Unterstrich (_) sollte grundsätzlich vermieden werden. beispiel:
war idFirst: Byte; // Pascal- Byte idFirst; // C
In diesem beispiel ist in dem Präfix (für den Index in Einem Array) d , wo Datentyp (für Double, su) und Erste dort Bezeichner (für den erste [englisch erstes = Deutsch der erste ] Element Einen Arrays). Wichtig ist, sterben Dass Variable idFirst
ein Integer ist, Obwohl im Datentyp ja ein d für Doppel notieren ist. Dies lies Daran, dass es sich um eine Laufvariable zu einem Array von Double-Werten handelt. Der physikalische Datentyp der Variablen steht im Namen der Variablennamen, hat jedoch keine Relevanz.
In der Zwischenzeit, fällen nur noch ein Präfix und ein Datentyp, dann alle Attribute optional Geist. So kann man Eine Laufvariable in Einem für -Schleife Auch einfach id Nennig und erreicht DAMIT Eine aussagekräftigere Kennzeichnung als mit Einem Variablennamen Wie laufe .
Präfixe
Dies ist streng genommen ein Attribut des ungarischen Variablennames ist das Präfix. Bitte warten Sie auf die Funktion der Variablen im Programm, geben Sie diese in das Feld ein.
Die nachstehend aufgeprägten Präfixe sind die jeweils vereenbaren. Sie wissen, dass jede Zeit neue, neue Aufgaben zu spezifizieren. In der Regel sind dies die folgenden Präfixe allerdings als absolut ausreichend.
Präfix | abgeleitet von | bedeutung |
---|---|---|
p | p unkt | Ein Zeiger zu einer Adresse. |
h | h andle | Ein Zeiger auf einen Zeiger, auch gleichwertig zu pp . Fast immer Wird h im zusammenhang mit der Kommunikation mit DM Betriebssystem Benutzt. |
rg | r eine g e | Ein Array, welches durch „normal“ Integer indiziert wird. Das Array Rg kann als mathematische Funktionsfunktion verwendet werden, wobei die einzelnen Gänse eine Zahl ein Element werden soll. Ein RGDETWA ist ein Array, das Gleitkommazahlen Doppelter genauigkeit Enthält. |
mp | m a p | Ebenfalls ein Array, with the Unterschieden zu rg that hier zum indizieren Beliebers Datumsart used Werden, zum Präfix MP Werden auch Zwei Datumstyp notieren, nämlich zunächst in dem Datentyp des Index, Und dann der Datentyp Dezember Inhalt. Ist x ein Beliebers Datentyp, so ist Mpix äquivalent zu RGX . |
dn | d omai n | Weder ein Präfix für ein Array: Die Spezialität von dn ist, dass dieses Präfix ist, dass die Wichtige nie Elemente von Arrays, ohne die Indies selbst Geist, waren diese Präfix sehr selten macht. |
in | in ndex | Eines ist das weise Präfixe im Zusammenhang mit Arrays. Z.B. Indiziert id ein rgd . Bei Einem mpfr , auch Ein Array von Gleitkommawerten, indiziert von Einem booleschen Datentyp, Kann man den Index alsifr oder Schlicht ir deklarieren (Obwohl ist EIN booleschen Datentyp Haben Muss). |
b | B ases | Ein sehr selt das Präfix, das jedoch ähnlich Wie in ist, nur that b die direkte Offset Eines Elements in Einem Array beschreibt. Ist das Array vom physischen Datentyp Byte, so sind b und ich soar gleich. In diesem Fall ist das physikalische Element der Elemente von Ein Arrays rgx , gebildet für den Index ix (beginnend bei 0) gültig : bx = dch * ix. |
e | E lement | Das Pendant zu mir . e kennzeichnet ein Element Ein Arrays und Wird meistens in verbindung mit dn genutzt und ist dementsprechend selten. Dennoch Kann Auch ein Element des Arrays RGD mit edbezeichnet Werden, Auch WENN stirbt in den meisten Fall nicht zweckdienlich ist. |
c | c ounter | Eine Anzahl von Elementen, etwa in einem Array. The Größe eines rgul kann als cul angegeben werden. |
d | d ifferenz | Ein Unterschied zwischen zwei Variablen, Meisttens in einem Array. Sollte man dabei nicht den Fehler machen, d mit c zu verwechseln: d bezieht sich immer Auf eine differenza between Indizes. |
gr | gr oup | Nicht mit rg zu verwechseln: gr bezeichnet EINEN Verbund von mehreren Die Variable. Dabei handelt er als Mensch und Mann in einer einzigen Anordnung, ohne eine Verordnung von unterschiedlichen Variablen. gr Kann bei Einem struct , Rekord oder Eine Klasse Benutzt Werden. |
f | fMannschaft | Ein Bit in einer Variablen. Nicht zu verwechseln mit DM Datentyp f oder wenig , da sich auf Die ganze (Physische) Variable bezieht. Das Präfix f zeigt ein Bit in einer Variablen des physikalischen Datentyps Byte, Wort usw., das Flaggentarakter hat. |
sh | sh ift Menge | Der Index zu einem Bit (f) in einem Variablen ( kein Array ). Ist nur f gesetzt, hat die Variable den Wert{\ displaystyle 2 ^ {sh}}. |
u | Du Nion | Eine unspezifische Variable, welche Unterschieden (ungarn) Datentypenbenhalten kann. Dies ist der Fall, wenn Sie sich für einen variablen Geist entscheiden. |
ein | a llocation | Eine Zuordnung, kein Array . a Wird als Complement zu p oder Auch h used, wenn in einem sterben Dereferenzierung Gespeichert Wird. DAMIT ist apl äquivalent zu l , dann stirbt es Variable an der Adresse von l ist, auch l selbst. |
v | Ihre globale Variable. Zum Austausch von Daten. Sollte in der Praxis spärlich getauft, und war traurig, die Sinn der Variablen auszulassen. Waren diese Variable scharf, so ist das Präfix einfach wegzulassen, als eine der Konstruktionen der Welt. |
Datentypen
Über die E-Mail-Adresse wird der Quell-Code benötigt , dh Sie haben bitte die gleiche Art von Daten oder Basistypen . Stellt man dabei EIN Leichten “ C -Geschmack“ Party war Benennung Betrifft (zum beispiel sterben l Wie lange Für einen 32-Bit Integerwert).
Datentyp | abgeleitet von | bedeutung |
---|---|---|
f | f Mannschaft | Boolesche Datentypen (dh ich bin die Bedeutung, der Cousin des physikalischen Datentyps) bzw. Variablen mit Wahrheitswert. Es Bezeichner sollten die wahr -Zustand , wo die Variable beschreiben, , ideal auch bedroht ist. |
ch | ch ar (acter) | Ein Ein-Byte-Zeichen. Meistens in einem nicht vordefinierten Behefteten (unsigned) Byte oder einem Char gespeichert. |
st | st. Ring | Eine „Pascal“ -Zeichenkette, ebenfalls eine der Zeichenkette, ersetzt Zeichens die Lengge des Strings enthält |
sz | s tring Z ero terminierte | Ein nullterminierter String, der in C ist (char *) implementiert |
fn | f u n ction | Meisters ein Seiger auf eine Methode. |
fl | f in l e | Eine Datei eine Datenstruktur, Meisters vom Betriebssystem übergeben. |
w | w ord | Ein Maschinenwort, Meistes zwei Byte groß und vorzeichenbehaftet. Gemeint ist allerdings nicht zwingend stirbt Umsetzung im physischen Datentyp Wort . Wer ist der AppsUN üblich, ist der Zweck.Etwasine generische Nutzung der Variablen mit den entsprechenden Methoden kann ein w reftärdigigen. |
b | b liefern | Ein Byte, welches auch nicht gleichnamigen physikalischen Datentypen gebunden ist (siehe w ). |
l | l ca. | Ein Doppelwort, auch vier Byte, ebenfalls nicht lang ( C ) oder Integer ( Pascal ) gebunden (siehe w ). |
uw | u nsigned wWorte | Nicht vorzeichenbehaftetes Maschinenwort. |
ul | u nsigned lOng | Nicht vorzeichenbehaftetes Doppelwort. |
r | R eal | Gleitkommawert mit einfacher Genauigkeit. In C ETWA Schwimmer . |
d | d ouble | Gleitkommawert mit doppelter Genauigkeit ( Doppel ). |
Bit | Ein einzelnes Bit. Könntest du mit meiner Flagge besser sein? | |
v | v oid | Eine leere Variable ohne Datentyp. Wird nur in Verbindung mit einem Zeiger verwendet ( pv ). |
env | env Eisen ment | Wird für Labels, auch Sprungziele verwendet (Pascal: goto envelop; ). |
sb | s egment base | Ein Segmentzeiger auf den Speicher (siehe Assemblersprache ). |
ib | Eine Offset-Adresse. Tatsächlich hat dieser Name zwei Gründe. Zunächst Kann sterben Variable als Index ( in ) zu Einem Array von Bytes ( b ) angesehen Werden, WENN man sich das RAM als Array vorstellt. Außerdem Kann man ib auch von in ndivisible b ase ableiten. |
Bezeichner
Oft ergänzen Präfix und Datentype vollständig, um eine Variable zu berechnen und zu erklären. Die Variable zum Durchlaufen Eines Arrays Rgch ist Durch
var ich: ganze Zahl; // Pascal int ich; // C
Ausreichend. Jedes Beiwerk erschillt überflüssig, “ nicht-ungarisch “ oder schlecht gefälscht . Zum Beispiel: ichLauf , ichIndex , ichArray , etc.
Trotzdem geht es um den Bezeichner, der den Variablen Beton an eine Aufgabe bindet. Dazu mag sich vielleicht ein beliebiges (selbstverständlich sinnlicher) Wort-Anhänger erinnern. Man muss nur Beacht, keine Unterstriche (_) zu Benutzen und das Wort Formular nach dem “ xxxxx “ zu notieren (auch NUR den Ersten Buchstaben groß zu schreiben). So gibt es Geld, das eine bestimmte gemeinsame Bedeutung hat, der Mann hat ihre gewöhnliche Verwendung eingeführt. Davon belässt sich auf einen Array oder eine ähnliche Struktur.
Bezeichner | bedeutung |
---|---|
Bezug auf Arrays | |
meine | Beschreibung des Elementes eines Arrays und wird oft im Zusammenhang mit einem Zeiger oder einem Index verwendet; pchMin , ichMin . |
Mikrofon (> = Min) | Ahnelt sehr Min , beschreibt jedoch das physisch kleinste Element, Welches in der Praxis fast immer Auch Mein ist. |
Zuerst (> = Mic) | Beschreibt das erste zu BENUTZER Element Eines Arrays. Ist oft ein Das Präfix im Bundle; ichFirst . |
Letzter (> = Erster) | Eine Variable xxLast ist das Pendant zu xxFirst . Das ist, was Sie suchen, und es ist eine einfache Aufgabe. |
Meiste (> = Letzte) | In Gewiss hinsicht das Gegenstück zu meinen , dann És den Höchsten Index Arrays angibt Eines. |
Kleber (> die meisten) | My Lim wird die Anzahl der Elemente in einem Array angegeben. Es ist der Index mit dem Namur xxLim größer als das letzte Element und nicht gültig. |
Mac (> = Einfügen) | Das Gegenstück zu Mic und DAMIT Max sehr ähnlich. Wer Lim ein ungültiger Index. |
Max (> = Mac) | Anhänger zu Min ; wird benötigt, um eine bestimmte Anzahl an Elementen eines Arrays anbieten zu können. Dieser Wert ist als Index auf einen Array gleichfalls ungünstig. |
Ohne Bezug zu einem Array | |
Null | Kennzeichnet einen ungültigen Wert, und wird als folgerichtigste Verwirrung betrachtet (siehe Implementierung von Pascal: nil ). Meisters Verstand werte wer “ 0 “ oder -1 enthalten. |
nichtig | Ähnlich wie Nil . Kennzeichnet 0 Jedoch trifft die Zahl “ „, Ebenfalls oft als junges Element. Über Mißverständnissen vorzubeugen, und ihre gleichsichtige Nutzung von Nil und Null, waren oder ggf. Konkret kommentiert. |
src | Dieser Bezeichner wird verwendet, um zu spezifizieren, das ist bei der Variablen um eine Quelle (engl. S ou rc e). ETWA bei Einem Transport algorithmus . |
dest | Dest Wird oft in verbindung Mit Src Benutzt und verweist auf das Ziel (engl. Dest ination) Einer Betrieb (Derens Quelle Src ist). |
Sav | Wird als temporärer Speicherplatz für den Wert einer Variablen genutzt. Zu den häufigen Nutzern dieses Bezeichners gehört auch Ihr stilistisch fragwürdiger wer das Präfix v , als die Variable keine strenge Namensbindung mehr. Abgeleitet vom Engl. Sav e. |
T | Ähnlich wie Sav , nur dass weder die Wünsche noch die Wünsche erklärt werden. T Sollte man erst recht vermeiden, vor Allem jedoch sterben Produktion Vieler “ Temporären “ Die Variable Durch Wiederholt Anhang von T . Namen, die xxTTT , xxTTTT oder xxT5 haben, sind Bezeichnungen für falsches Ungarisch und werden grundsätzlich nicht genutzt. |
Darüber hinaus schweißt sich natürlich auch andere Bezeichner wählen. Jedlically solte man sich bekennen, zuerst de Bezeichner der Tabelle zu verwenden. Dies ist wahrscheinlich in Bezug auf Arrays der Fall. Zum Beispiel Gibt’s die Funktion
Länge (RGX);
in Pascal de Lange des Arrays rgx zurück. So ist es verlockend, das Plan Ergebnis in Einem Variable culLength zu speichern. Falsch ist diese Lösung nicht, denn die Nutzung der Bezeichner ist kein Fremder. Jedoch ist es wünschenswert culMax zu Verwenden, um Standard-zu Programmierer.
Beispiele
beispiel | bedeutung |
---|---|
Rgch | Ein Array von Zeichen, ansonsten ausgedruckt eine Zeichenkette. This ist Notation äquivalent zu sz (oder je nach Implementierung zu st ). |
ast | Der Wert an der Stelle auf sterben st Zeigt, auch das erste Element Wacholder Pascal’schen Zeichenkette und DAMIT Anzahl der Elemente sterben. Gleichbedeutend mit cst . |
uuluwch | Eine Variable, die 32-Bit, 16-Bit, das ein bisschen 8-Bit große Zahlen spricht. Praxis Würde man sich Vermutlich mit Einem in der ul begnügen. Es bestand jedoch kein Zweifel, dass es keinen Zweifel gab, dass die Zahlen einer bestimmten Menge von Datentypen angehörten. |
rgbit | Eine Ansammlung von Marken. Sie können die Variable als Eine Lunge implementieren . Hier ist der Groß Vorzug der Ungarischen Notation. Aus einem langen Fahnen; Könnte man eine Bedeutung der VariablenFahnen herauslesen. Aber ein langes Rgbit; genau auf den Charakter einer Sammlung von Marken. |
rggr | Ein Array, dessen Elemente verbinden oder Klassen sind. |
mpchgr | Ebenfalls ein Array, seine Elemente sind oder sind. Allerdings with the Unterschieden zu rggr that das Array von dir indiziert Wird, auch von positivem Bytes. |
Systems Ungarisch
This Notation is the Abwandlung der microsoftften Windowprogrammierer und entspricht nicht mehr dem Sinn, Simonyi der Entwicklung der ungarischen Notation .
Zusammenfassung des Variablennamens
Präfix und Bezeichner
Anders als beim Apps ungarischen Wird der Bezeichner nur aus dem Präfix , Welcher sie Datentyp Entspricht, und frei ihnen gewählten Namen zusammengesetzt.
Präfix | Datentyp | beispiel |
---|---|---|
n | ganze Zahl | nSize |
b | boolean | bBusy |
sz | null terminierter String | szLastName |
p | zeiger | pMemory |
ein | Feld | acount |
ch | Saibling | ChName |
dw | Doppelwort, 32 Bit | dwNumber |
w | Wort, 16 Bit | wNumber |
Die einzelnen Präfixe Schweißer können kombiniert werden. So definiert paszTabelle einen Zeiger auf ein Array mit null-terminate Strings.
Präfixe der Sichtbarkeit
Zusätzliche Schweißpräfixe für Variablensichtbarkeit definieren:
Präfix | sichtbarkeit | beispiel |
---|---|---|
m_ | Member-Variable | m_szLastName |
p | Methodenparameter | p_nNewValue |
i_ | Schnittstellenparameter (Argument der Funktion) | i_nNewValue |
s_ | statische Variable | s_nInstanceCount |
g_ | Globale Variable | g_nTimestamp |
Beispiele
Zum Beispiel in den Tabulaüberichten integriert.
Kritik
Einwände Gegen ungarische Notation
Robert C. Martin
„… HN und andere Formen der Typenkodierung sind heutzutage einfach Hindernisse. De gjør det vanskeligere å ændre navnet eller type af en variable, funktion, medlem eller klasse. Sie erschweren das Lesen des Codes. Og de skapar den vielheten bei det kodende system vil den Leser irreführen. „
„Heutzutage setzt die ungarische Notation und andere Formen des Schreibens auf der Grundlage von Hindernissen. Sie erstellen den Namen oder Typ einer Variable, Funktion, Feld oder Klass zu. Sie können den Code lesen. Zweifellos ist die Möglichkeit, das Codierschema für den Leser ist irreführend. „
Linus Torvalds
„Die Codierung des Typs einer Funktion im Namen (sog. Ungarische Notation) ist hirngeschädigt – der Compiler kennt die Typen sowieso und kann sie prüfen, und das Programm wird nur durcheinander gebracht.“
„Die Kodierung des Typs einer Funktion in den Namen (die sogenannte ungarische Schreibweise) ist hirngeschädigt. There Compiler weiß die Typen und kann diese überprüfen. Zudem verwirrt den Programmierer. „
Bjarne Stroustrup
„Nein, ich empfehle ‚Ungarisch‘ nicht. Ich betrachte ‚Ungarisch‘ (Einbetten einer abgekürzten Version eines Typs in einen Variablennamen), eine Technik, die in nicht typisierten Sprachen nützlich sein kann, aber für eine Sprache, die generische Programmierung und objektorientierte Programmierung unterstützt, völlig ungeeignet ist von Operationen basierend auf dem Typ der Argumente (der Sprache oder der Laufzeitunterstützung bekannt). In diesem Fall wird durch die „Erstellung eines Objekttyps in Namen“ die Abstraktion einfach kompliziert und minimiert. „
„Nein, ich empfehle die ungarische Notation. Ich Betrachte sterben Ungarische Notation (Einbettung Wacholder abgekürzten Version Eines typs in Einem Variablennamen) als Eine Technik, Welche in untypisierten Sprachen Nützlich sein Kann, aber Völlig ungeeignet für Eine Sprache ist, Welche generische und Objektorientierte Programmierung – beides Technik sterben sterben Auswahl von Der Betrieb basierend auf den Typ (Welche aufgrund der Sprache oder die Laufzeitunterstützung Bekannt ist) Ein Argument – Unterstützt. In diesem Fall werden wir mehr Komplikationen und Abstraktionen sehen. „
Microsoft
- Die Framework Design Guidelines verbieten Entwicklern den Einsatz der Ungarischen Notation, Visual Basic 6 während des Krieges. [5] Die Framework Design Guidelines sind die gleichen wie die Benin Variablen.
Bindung von Feldname an Felddatentyp
Eine weitere seltsame Version der ungarischen Version ist die Ersatzmigration von Code. Anderer sich der Datentyp Eines Felder, so Durcheinander das Feld zwangsläufig umbenannt Werden, Wodurch – Code, wo auf der API basiert, ungültig Wird und großflächig (z. B. bei Einer Umstellung von 32-Bit auf 64-Bit – Wert) Geändert Werden Muss. Aus Gründen der Code-Abwärtskompatibilität wird z. B. im Falle der Winapi auf eine Änderung des Feldnamens verzichtet, wodurch die ungarische Notation auf den veralteten Feldtyp hinweist. Beispiel: [6]
Win16: WndProc (HWND hW, UINT w , WPARAM w Param, LPARAM l Param)
Weblinks
- Roedy Green – Wie schreibe ich nicht erreichbaren Code (Artikel 30.)
- .NET Framework Entwicklerhandbuch Allgemeine Konvention. Offizielle Empfehlung von Microsoft für das .NET Framework
- Dr. Dobbs Journal – Gespräche: Ungarische Warthogs
- Joel on Software – Falscher Code falsch aussehen – Einfache Bemerkungen über Simonyis Wahre Intention Hinter Ungarischer Notation
- Charles Simonyi: Meta-Programmierung: Eine Software-Produktionsmethode . (gzip Postscript) Dezember 1976 (Doktorarbeit)
- Charles Simony’s Eigene Erklärung der Ungarischen Notation
- Peter GAAL – Ein Alphabet der Ideen Wieso Ungarisch Tatsächlich Äglich Funktioniert, Who The Hungarian Notation
- HTML-Version von Doug Klinders Memo
Einzelstunden
- Hochspringen↑ Charles Simonyi: Ungarische Notation. In: MSDN. Microsoft, 1999; abgeraufen am 30. Juli 2014 (englisch).
- Hochspringen↑ Robert C. Martin: Clean Code: Ein Handbuch für Agile Software Craftsmanship . Hrsg.: Prentice Hall PTR. 1. Auflage. Redmond WA 2008, ISBN 978-0-13-235088-4 .
- Hochspringen↑ Linux-Kernel-Coding-Stil. In: Linux (Kernel) Dokumentation. Abgerufen am 30. Juli 2014 (Englisch).
- Hochspringen↑ Bjarne Stroustrup: Bjarne Stroustrups C ++ Stil und Technik FAQ. 8. Juni 2014; abgeraufen am 30. Juli 2014 .
- Hochspringen↑ Allgemeine Namenskonventionen. In: MSDN. Microsoft; abgeraufen am 30. Juli 2014 (englisch).
- Hochspringen↑ Wofür stehen die Buchstaben W und L in WPARAM und LPARAM? – Das alte neue Ding – Aufstellungsort-Haus – MSDN Blogs