Was ist ungarische Notation und sollte ich sie verwenden?

Ein berühmtes Zitat in Programmierkreisen lautet wie folgt:

In der Informatik gibt es nur zwei schwierige Dinge: Cache-Ungültigmachung und Benennung.

Die ungarische Notation ist ein System, das versucht, die Benennung etwas zu vereinfachen. Möglicherweise stoßen Sie beim Erkunden einer vorhandenen Codebasis auf die ungarische Notation. Möglicherweise haben Sie einen Kollegen, der besonders daran interessiert ist, es zu verwenden. Aber wie ist es und wie sieht es aus? Und sollten Sie es wirklich benutzen?

Was ist ungarische Notation?

Die ungarische Notation ist eine Konvention zur Benennung von Bezeichnern. Es wird hauptsächlich auf die Benennung von Variablen angewendet, kann aber auch die Benennung von Funktionen abdecken. Die Notation ist ein Versuch zu formalisieren, wie der Name einer Variablen ihren Typ oder Zweck angeben kann.

In der ungarischen Notation beginnen Variablennamen alle mit einer Gruppe von Buchstaben mit einer vereinbarten Bedeutung. Diese Buchstaben sind normalerweise eine Abkürzung für den Variablentyp. Zum Beispiel könnte der Buchstabe l eine lange ganze Zahl darstellen. Die Abkürzung str steht für eine Zeichenfolge.

Ist es wirklich ungarisch?

Ja, die ungarische Notation wurde tatsächlich von einem Ungar erfunden! Charles Simonyi war ein Microsoft-Mitarbeiter, als er den Begriff erfand. Er war Programmierer im Unternehmen und arbeitete an Anwendungssoftware.

Im Gegensatz zu den meisten anderen westlichen Sprachen ordnen ungarische Namen zuerst den Familiennamen, gefolgt vom Vornamen. Der Begriff ungarische Notation kann auf diese Tatsache verweisen, oder es kann nur ein glücklicher Zufall sein. Für Simonyi hätte es aufgrund seiner Muttersprache natürlicher sein können.

Wie sieht es aus?

Anstatt eine Variable einfach nach Alter zu benennen, enthält die ungarische Notation ein Präfix, das den Typ dieser Variablen darstellt. In C kann ein Programmierer beispielsweise eine solche Variable wie folgt deklarieren:

 int iAge;

Da C eine stark typisierte Sprache ist, ist das Präfix i zum Zeitpunkt der Deklaration redundant. Wenn Sie die Variable später verwenden, erweist sich das Präfix jedoch als nützlich:

 printf("I am %d years old", iAge);

Das Präfix erinnert uns daran, dass wir den richtigen Variablentyp verwenden.

In einer schwach typisierten Sprache wie PHP können Variablen je nach Wert unterschiedliche Typen annehmen. Die ungarische Notation ist also möglicherweise nützlicher:

 $iAge = 21;

Hier einige weitere Beispiele für ein gemeinsames ungarisches Notationsschema:

Präfix Art Beispiel
b Boolescher Wert bLightsEnabled
c Charakter cLetterGrade
str Zeichenfolge strCategory
ich ganze Zahl iWheels
f schweben fMiles
C. Klasse CPerson
{Klassenname} Objekt personLeader

Systeme Ungarisch versus Apps Ungarisch

Die ungarische Notation ist gespalten. In einer Ecke haben wir Systems Hungarian, in der anderen Apps Hungarian. Der Unterschied ist subtil, aber von entscheidender Bedeutung.

Systems Hungarian ist die Version, die häufig mit der ungarischen Notation assoziiert wird. Es handelt sich ausschließlich um den Typ der Variablen, wie wir oben gezeigt haben.

Apps Ungarisch versucht, den Zweck einer Variablen anstelle ihres Datentyps zu kodieren. Dies ist ein viel umfassenderes Konzept, sodass Beispiele viele verschiedene Anwendungsfälle abdecken können:

 // an Unsafe String eg a name the user entered in a web form
$usName
// the Length of the vertical side
$lVertical
// a Count of references to an object
$cRefs

Apps Ungarisch war die ursprüngliche Form der ungarischen Notation, und die Beschreibung des Zwecks war Simonyis Absicht. Systems Hungarian ist so etwas wie eine Mutation, von der viele behaupten, sie sei zum Schlechten.

Was ist gut an der ungarischen Notation?

Wie bereits erwähnt, kann Systems Hungarian für schwach typisierte Sprachen nützlich sein. Es ermöglicht jemandem, der sich Code ansieht, sofort den Typ einer Variablen zu bestimmen, wann immer sie angezeigt wird.

Die ungarische Notation hilft auch dabei, eine konsistente Variablennamen zu erzwingen. Schließlich ist eine schlechte Benennung von Variablen einer der häufigsten Programmierfehler . Mithilfe der Apps-Notation können Programmierer wichtige Fehler erkennen, auf die die Sprache sie sonst nicht aufmerksam machen würde.

Und was ist schlecht an der ungarischen Notation?

Im Allgemeinen ist die ungarische Notation aus der Mode gekommen. In stark typisierten Sprachen ist es weitgehend redundant, insbesondere im ungarischen Systemtyp. Dies kann auch das Lesen von Code erschweren. Probleme, bei deren Lösung dies hilfreich sein könnte, sind häufig Anzeichen für tiefere Mängel, z. B. eine übermäßige Abhängigkeit von globalen Variablen .

Apps Notation scheint mehr zu bieten, aber selbst diese Version hat ihre Kritiker. Es gibt ein gutes Argument dafür, dass Informationen über den Zweck immer noch Teil des Variablentyps sein sollten.

Jede Sprache, die benutzerdefinierte Typen oder Klassen unterstützt, kann normalerweise dieselben Ziele auf bessere Weise erreichen. Das Benennen einer Variablen usName macht sie nicht sicherer. Durch das Erstellen einer Klasse mit dem Namen UnsafeString kann ein Compiler jedoch den Typ einer Variablen überprüfen.

Soll ich die ungarische Notation verwenden?

Letztendlich liegt diese Wahl bei Ihnen. Wenn Sie in einem größeren Team arbeiten, wird wahrscheinlich jemand die Entscheidung treffen und jeder sollte mitmachen. Wenn Sie Ihren eigenen Code schreiben, können Sie anhand der obigen Argumente entscheiden.

Vielleicht möchten Sie jedoch die neuesten Ratschläge von Microsoft beachten, dem Unternehmen, aus dem die ungarische Notation stammt. Seit 2008 enthalten ihre Allgemeinen Namenskonventionen diesen einfachen Hinweis:

❌ Verwenden Sie KEINE ungarische Notation.