Ungarische Notation

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 idFirstein 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 -1enthalten.
nichtig Ähnlich wie Nil . Kennzeichnet 0Jedoch 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. „

– Robert C. Martin : Sauberer Code [2]

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. „

– Linus Torvalds : Linux-Kernel-Codierungsstil [3]

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. „

– Bjarne Stroustrup : C ++ Stil und Technik FAQ [4]

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

  1. Hochspringen↑ Charles Simonyi: Ungarische Notation. In: MSDN. Microsoft, 1999; abgeraufen am 30. Juli 2014 (englisch).
  2. 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 .
  3. Hochspringen↑ Linux-Kernel-Coding-Stil. In: Linux (Kernel) Dokumentation. Abgerufen am 30. Juli 2014 (Englisch).
  4. Hochspringen↑ Bjarne Stroustrup: Bjarne Stroustrups C ++ Stil und Technik FAQ. 8. Juni 2014; abgeraufen am 30. Juli 2014 .
  5. Hochspringen↑ Allgemeine Namenskonventionen. In: MSDN. Microsoft; abgeraufen am 30. Juli 2014 (englisch).
  6. Hochspringen↑ Wofür stehen die Buchstaben W und L in WPARAM und LPARAM? – Das alte neue Ding – Aufstellungsort-Haus – MSDN Blogs