Effektiver programmieren mit der ungarischen Notation

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Jörg Schumacher, Stöckse; André Minhorst, Duisburg

Bei der Entwicklung von Applikationen steht der Entwickler oft vor der Frage, wie Variablen, Konstanten, Objekte und so weiter heißen sollen. Vor allem dann, wenn Anwendungen im Team entstehen, ist die Standardisierung von Bezeichnungen wichtig. So entstehen Namenskonventionen, die festlegen, welche Klassen oder Kategorien von Objekten mit welchen Namenskürzeln identifiziert und gruppiert werden. Dies ist notwendig, damit andere Team-Mitarbeiter den geschaffenen Programmcode schneller verstehen, erleichtert aber ebenso die Wartung von Anwendungen in Zukunft durch die Entwickler selbst oder Drittpersonen. Dieser Artikel vermittelt Informationen über eine in der Programmierung weit verbreitete Konvention – die ungarische Notation.

Der Bezeichner von Variablen, Konstanten oder anderen Objekten sollte möglichst aussagekräftig sein, damit ein Programmierer auch nach längerer Zeit noch die Bedeutung der Objekte in einem Programm erkennen kann. Oft wird versucht, den Verwendungszweck der Variablen in ihren Namen auszudrücken. Bei geschickter Namensvergabe lassen sich jedoch noch weitere Informationen in die Variablenbezeichnung aufnehmen.

Der Ursprung der dafür am meisten verbreiteten Namenskonvention liegt in den 70er Jahren und geht auf Charles Simony zurück. Charles Simony, einer der berühmten Programmierer von Microsoft, war maßgeblich an der Entwicklung von Microsoft Word und Microsoft Multiplan beteiligt. Er entwickelte eine Namenskonvention, die von ihm als “ungarische Namenskonvention” bezeichnet wurde. Der Begriff, so Charles Simony in einem Interview, hat eine doppelte Bedeutung.

Zum einen rührt er aus der Tatsache her, dass Charles Simony in Ungarn geboren wurde und er diese Konvention selber entwickelt hat. Zum anderen ist es eine Replik auf die Redensart “das sind für mich böhmische Dörfer”, die ursprünglich meint, dass man etwas nicht versteht. Populär wurde dieser Ausdruck im Dreißigjährigen Krieg. Soldaten, die in Böhmen kämpften, verstanden die tschechischen Namen der dortigen Dörfer nicht. Im Gegensatz dazu soll also der Begriff “ungarische Notation” signalisieren, dass selbst komplizierte Namen verständlich bleiben.

Die Grundidee der ungarischen Namenskonvention war die Aufnahme des benutzten Datentyps in den Namen einer Variablen. Zu diesem Zweck wird dem eigentlichen Namen eine Folge von Kleinbuchstaben vorangestellt (Präfix), die den Typ der Variablen beschreiben. Einige Beispiele zur Variablendeklaration in Visual Basic sollen das verdeutlichen (s. Tab. 1).

In Visual Basic werden dem Variablennamen in der Regel drei Buchstaben vorangestellt. Dabei handelt es sich optimalerweise um die ersten drei Buchstaben der Bezeichnung des jeweiligen Variablentyps.

Welche Präfixe verwendet werden, hängt davon ab, welche Elemente die Programmiersprache bietet. Das ist zwar je nach Programmiersprache unterschiedlich, prinzipiell hat sich aber die Art der Benennung durchgesetzt und findet auch in VBA Anwendung, also zum Beispiel in der Access-Programmierung.

Präfix

Variablentyp

Beispiel

int

Integer

intAnzahl

str

String

strVorname

cur

Currency

curEinnahmen

tbl

Table

tblAdressen

rep

Report

repAdressenliste

cmd

Commandbar

cmdOK

Tab. 1: Variablenpräfixe nach ungarischer Notation

Auch wenn die Verwendung der ungarischen Namenskonvention auf den ersten Blick ein wenig merkwürdig erscheint, hilft sie doch sehr, ein umfangreiches Programm verständlicher zu machen.

Obwohl das Prinzip recht simpel ist, leistet es schon während der Programmierung gute Dienste und hilft unter Umständen, Fehlern vorzubeugen. Wie das funktioniert, zeigt folgendes Beispiel.

Angenommen, dass in einem Programm zwei Variablen definiert werden, eine vom Datentyp Integer und eine vom Datentyp Single.

Hinweis

Der Datentyp Integer hat zwei Bytes Speicherbedarf und kann ganzzahlige Werte von -32768 bis 32767 darstellen. Der Datentyp Single hat vier Bytes Speicherbedarf und kann nicht nur ganzzahlige, sondern auch Gleitkommazahlen speichern. Weitere Informationen zum Thema Datentypen finden Sie in der Onlinehilfe von Access unter dem Stichwort Datentypen (Zusammenfassung).

Später im Programm findet eine Zuweisung statt. In den folgenden Zeilen werden die beiden Variablen deklariert. Der Variablen Zahl1 wird der Wert 1,34 zugewiesen. Anschließend wird der Inhalt von Zahl1 der Variablen Zahl2 zugewiesen. Das anschließend aufgerufene Meldungsfenster gibt schließlich den Wert der Variablen Zahl2 aus. Und hier folgt die böse überraschung: Die Variable enthält nicht die Zahl 1,34 als Wert, sondern die 1.

Dim Zahl1 As Single
Dim Zahl2 As Integer
Zahl1 = 1.34
Zahl2 = Zahl1
MsgBox "Zahl2 = " & Zahl2

Dieses Beispiel zeigt einen Fehler, der bei Zuweisungen häufig auftritt: Die Wertebereiche der Variablen sind nicht identisch. So lange der Wert von Zahl1 den Wertebereich von Zahl2 nicht überschreitet und keine Nachkommastellen vorkommen, ist die Zuweisung unproblematisch.

Ein weiterer Fehler, der aus dieser Konstellation entstehen kann, ist folgender: Beträgt der Wert von Zahl1 zum Beispiel 100.000 und liegt damit außerhalb des möglichen Wertebereiches der Variablen Zahl2, führt diese Zuweisung zu einem Programmfehler.

Im Vergleich zum oben beschriebenen Fehler wird dieser Fehler immerhin von der Anwendung angezeigt, sodass die Berechnung nicht unbemerkt mit falschen Werten fortgesetzt wird.

Bei Verwendung der ungarischen Namenskonvention fällt dem Programmierer das Problem dagegen sofort ins Auge:

Dim sngZahl1 As Single
Dim intZahl2 As Integer
sngZahl1 = 1.34
intZahl2 = sngZahl1
MsgBox "Zahl2 = " & sngZahl2

In diesem Beispiel wird schon beim Schreiben der Programmzeile deutlich, dass hier ein Fehler bei der Zuweisung auftreten kann, auch wenn die Definitionen der Variablen und damit die Festlegung der Datentypen weit entfernt von der Zuweisung im Programmtext stehen könnten.

Standards und Konventionen werden oft als einschränkend empfunden. Es ist mitunter eher lästig, sich an die Vorgaben zur Bezeichnung der verwendeten Elemente zu halten. Aber Konventionen haben unbestreitbare Vorteile:

  • Konventionen machen die Benennung einfacher: Wenn ein bestimmtes Muster für die Erstellung von Namen einmal festgelegt ist, kann nach einiger übung nahezu blind danach verfahren werden.
  • Konventionen erleichtern das Verständnis. Wenn ähnliche Namen für ähnliche Zusammenhänge stehen, muss sich der Entwickler auf weniger Details konzentrieren.
  • Es ist viel einfacher, fremde Quelltexte zu analysieren.
  • über Konventionen beim Programmieren lässt sich trefflich streiten. Jeder Programmierer entwickelt mit der Zeit eigene Konventionen. Eine änderung dieser Gewohnheiten ist eher lästig. Oft wird über Konventionen sogar gestritten als ginge es um Religion.

    Dabei ist es letztlich beim Programmieren egal, welche Konventionen zugrunde liegen. Alles wird einfacher, je mehr sich die Entwickler an relativ einheitliche Regeln halten. Und die ungarische Notation hat sich über die Jahre als Quasi-Standard herausgebildet, nicht zuletzt natürlich auch durch die Verwendung der Prinzipien in den Programmiersprachen von Microsoft.

    Ungarische Namen bestehen aus drei Teilen: Basistyp, Präfix und Bezeichner. Diese drei Teile müssen aber nicht immer alle vorhanden sein. Meist bestehen ungarische Namen nur aus dem Präfix und dem Bezeichner.

    Präfix und Basistyp sind zusammen der kleingeschriebene Teil, mit dem jeder Variablenname beginnt. Es gibt auch nicht für alle Fälle standardisierte Bezeichner, sodass entweder die Phantasie des Entwicklers beim Erstellen eigener Programme oder beim Lesen von Fremdprogrammen gefordert ist.

    Basistypen bezeichnen den Datentyp der Variablen. Dabei werden sowohl die Standardtypen als auch abstrakte Datentypen durch Kürzel repräsentiert. So steht üblicherweise der Buchstabe obj als Basistyp für Objekte, ohne diese weiter zu kennzeichnen. Im Allgemeinen wird ein Basistyp nur dann verwendet, wenn eine detailliertere Bezeichnung nicht möglich oder notwendig ist.

    Die Abkürzung der Basistypen ist nicht immer eindeutig. Das liegt zum Beispiel bei den Standardvariablentypen daran, dass der Typ (beispielsweise numerisch) selbst äußerst wenig über den Verwendungszweck der Variablen aussagt. Bei den abstrakten Datentypen wie beispielsweise wnd für Fenster ist der Verwendungszweck meistens klar. Es ist aber problematisch, eine geeignete Abkürzung zu finden. In der Praxis kommt es selten vor, dass zwei gleiche Abkürzungen im selben Abschnitt des Codes verwendet werden. In diesem Fall spielt dann der Bezeichner selbst eine größere Rolle als sonst.

    Präfixe gehen über den Basistyp hinaus und beschreiben den Zweck einer Variablen. Im Gegensatz zu den Basistypen sind Präfixe eindeutig – was in der Programmierpraxis auch nicht immer gewährleistet ist. Die Präfixe sind das Charakteristikum der ungarischen Notation. Sie beschreiben die Bedeutung einer Variablen im Programmkontext. Präfixe erscheinen im Namen vor dem Basistyp.

    Sie können beliebig mit weiteren Präfixen oder Basistypen kombiniert werden. Häufig verwendet wird beispielsweise der Buchstabe h für Handle: Objekte des Betriebssystems werden häufig durch Handles repräsentiert. In der Kombination mit dem Basistyp Fenster entsteht so hwnd als Vorspann für den Bezeichner des Handles eines Fensters.

    Hinweis

    Eine übersicht über die üblichen Präfixe innerhalb von VB für allgemeine Steuerelemente und Objekte finden Sie in der englischen Microsoft Knowledge Base, Artikelnummer 173738. Verwenden Sie den Suchbegriff KB173738.

    Function IsLoaded(ByVal strFormName As String) As Boolean
        Dim objAccessObject As AccessObject
        Set objAccessObject = CurrentProject.AllForms(strFormName)
        If objAccessObject.IsLoaded Then
            If objAccessObject.CurrentView <> acCurViewDesign Then
                IsLoaded = True
            End If
        End If
    End Function

    Quellcode 1

    Der dritte Bestandteil eines “ungarischen” Namens ist der Bezeichner. Außerhalb der ungarischen Notation bestehen Objektnamen nur aus dem Bezeichner. Der Bezeichner ist der eigentliche Name, aus dem der Sinn und Zweck der Variablen im Kontext des Codes hervorgehen sollte.

    Die Frage, ob zur Bezeichnung englische oder deutsche Namen Verwendung finden, ist beinahe wieder eine Glaubensfrage. Während viele Entwickler auf durchgängig englische Bezeichner setzen, heben andere den Vorteil deutscher Bezeichner für selbst definierte Programmelemente hervor.

    Hinweis

    Unter Windows ist es üblich, Bezeichner mit einem Großbuchstaben zu beginnen und durch Groß-/Kleinschreibung zu unterteilen. Dabei beginnt jeder Bezeichner mit einem großen Buchstaben, wie zum Beispiel intAnzahlPersonen.

    Nachteile der ungarischen Notation

    Bei allen beschriebenen Vorteilen der ungarischen Notation sollen die Nachteile nicht verschwiegen werden.

    In der Praxis wird manchmal der Bezeichner komplett weggelassen und nur noch die Typbeschreibung verwendet. Viele derartige Beispiele finden sich in der Onlinehilfe von Microsoft Access. Ein Fenster heißt dann zum Beispiel nur hwnd, eine Zeichenkette str oder eine Datensatzgruppe rst. Diese Namen vermitteln den Verwendungszweck nicht mehr: hwnd könnte ein Eingabefenster, das Hauptfenster oder ein Kontrollelement sein, was dann erst aus dem Kontext hervorgeht.

    Es sind viele verschiedene Versionen der ungarischen Notation im Umlauf, die sich geringfügig voneinander unterscheiden und mehr oder weniger streng gehandhabt werden. Allen gemeinsam ist aber die Verwendung von Präfixen.

    Ein Beispiel aus der Datenbank Nordwind soll die Verwendung der ungarischen Notation in Access veranschaulichen. Die Funktion gibt den Wert True zurück, wenn das angegebene Formular in Formularansicht oder Datenblattansicht geöffnet ist. Dazu reicht es in diesem Fall aus, die Entwurfsansicht auszuschließen, da ein Formular nur eine dieser drei Ansichten annehmen kann (s. Quellcode 1).

    Hinweis

    Leider zeigt dieses Beispiel, dass es auch im Hause Microsoft Inkonsistenzen bezüglich der Verwendung von Präfixen bei der Variablenbenennung gibt: Während im weiter oben erwähnten Knowledgebase-Artikel das Präfix obj für Objekte vorgesehen ist, findet sich im Original dieses Beispiels aus der Nordwind-Datenbank von Access XP das Präfix o wieder.

    Konstanten

    Im Beispielcode wird für die Prüfung der Ansicht auf eine benannte Konstante zurückgegriffen, die im Beispiel für einen Zahlenwert steht. Diese Verwendung benannter Konstanten wird von Microsoft als zukunftssicher propagiert. In zukünftigen Versionen von Microsoft Access könnten sich zwar die tatsächlichen Werte der Konstanten, nicht aber deren Bezeichner verändern.

    Eingebaute Konstanten verfügen – wie es die ungarische Namenskonvention empfiehlt – über ein aus zwei Buchstaben bestehendes Präfix. Es bezeichnet die Objektbibliothek, die die Konstante definiert.

    Konstanten aus der Microsoft Access-Bibliothek führen zum Beispiel das Präfix ac, aus der ADO-Bibliothek das Präfix ad und aus der Visual Basic-Bibliothek das Präfix vb.

    Das macht vor allem die Suche nach den verfügbaren Konstanten leichter:

    Das im Beispiel verwendete acCurViewDesign lässt sich aufgrund der verwendeten Konvention durch das Präfix ac leicht als eingebaute Accesskonstante identifizieren, die zu CurrentView gehört (zweiter Bestandteil CurView) und die Designansicht repräsentiert (eigentlicher Bezeichner Design).

    Ein Blick in den Objektkatalog bestätigt diese überlegung (siehe Bild 1) und verrät dabei sogar noch, dass der zugehörige, tatsächliche Wert dieser Konstante Null ist.

    Bild 1: Konstanten im Objektkatalog

    Ebenso der Konvention entsprechend deutet strFormName auf eine Variable für eine Zeichenfolge.

    Die ungarische Notation kann und sollte bei der Arbeit mit Access konsequent verwendet werden. In den folgenden Abschnitten finden Sie die Präfixe für die wichtigsten Objekte und Variablentypen unter Access. Außerdem erfahren Sie, in welchen Fällen diese Konvention in der Regel nicht verwendet wird.

    Variablentypen

    In Tab. 2 finden Sie eine Auflistung der meistgebrauchten Variablentypen in Access und den entsprechenden Präfixen.

    Variablentyp

    Präfix

    Byte

    byt

    Boolean

    f

    Integer

    int

    Long

    lng

    Single

    sng

    Double

    dbl

    Currency

    cur

    Date

    dat

    Object

    obj

    String

    str

    Variant

    var

    Tab. 2: Variablentypen und deren Präfixe

    Datenbankobjekte

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar