Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 26 Style-Guide
gp 26.1 Programmierrichtlinien
gp 26.2 Allgemeine Richtlinien
gp 26.3 Quellcode kommentieren
gp 26.3.1 Kommentartypen
gp 26.3.2 Strategischer und taktischer Kommentar
gp 26.3.3 Bemerkungen über JavaDoc
gp 26.3.4 Gotcha-Schlüsselwörter
gp 26.4 Bezeichnernamen
gp 26.4.1 Ungarische Notation
gp 26.4.2 Vorschlag für die Namensgebung
gp 26.5 Formatierung
gp 26.5.1 Einrücken von Programmcode - die Vergangenheit
gp 26.5.2 Verbundene Ausdrücke
gp 26.5.3 Kontrollierter Datenfluss
gp 26.5.4 Funktionen
gp 26.6 Ausdrücke
gp 26.7 Anweisungen
gp 26.7.1 Schleifen
gp 26.7.2 Switch, case und Durchfallen
gp 26.8 Reihenfolge der Eigenschaften in Klassen
gp 26.9 Zugriffsrechte und Zugriffsmethoden
gp 26.9.1 Accessors/Zugriffsmethoden
gp 26.10 Verweise


Galileo Computing

26.4 Bezeichnernamendowntop

Für die Namensgebung von Variablen ist die (nicht unbestrittene) ungarische Notation bekannt, die auf Charles Simonyi zurückgeht. Sie gibt uns schon einen kleinen Einblick in die Probleme der Namensgebung.


Galileo Computing

26.4.1 Ungarische Notationdowntop

Die ungarische Notation ist eine Schreibkonvention, die Variablen und Funktionen durch ein optionales Präfix, eine Datentypangabe und einen Identifikator kennzeichnet. Die Identifikation ist der eigentliche Variablenname. Das Präfix und die Datentypangabe werden meist durch ein bis zwei Zeichen gebildet und geben weitere Auskunft über die Variable, die normalerweise nicht im Namen kodiert ist, zum Beispiel, um welchen Datentyp es sich handelt. Einige Vorschläge: p für einen Zeiger (von engl. pointer), lp, hp, np für einen long-/huge-/near-Zeiger und h für ein Handle. Da es in Java keine Zeiger gibt, können wir auf diese Art von Präfix leicht verzichten. Auch für die Datentypen gibt es einige Vorschläge: f für Wahrheitswert (von engl. flag), ch für Zeichen (engl. character), sz für eine abgeschlossene Zeichenkette (engl. string, zero terminated). fn für Funktion, w für Wort, l für long, b für byte, u für einen Typ ohne Vorzeichen (von engl. unsigned) und v für einen unbestimmten Datentyp (engl. void). Der Identifikator soll nun nach Simonyi mit Großbuchstaben beginnen und sich aus Worten zusammensetzen, die wiederum mit Großbuchstaben beginnen.

Die Idee von Charles Simonyi bezieht sich auf die Programmiersprache C und ist nur in Ansätzen auf Java übertragbar. Zudem stellt sich die generelle Frage, ob solch eine Namensgebung gut und sinnvoll ist - und wenn ja, ob in der Form, wie sie Simonyi vorschlägt. Da wir in Java nicht mit Speicherblöcken und Pointern arbeiten, sondern nur mit Referenzen (wobei auch der Name »Handle« passend ist), erübrigt sich dieses Präfix. Den Datentyp mit anzugeben, scheint auch nicht schön zu sein, da wir ohnehin nur zwischen wenigen Datentypen auswählen können. Für die grobe Trennung von Primitiven, Objekten und Funktionen müssen wir uns etwas einfallen lassen. Aber für die Primitiven brauchen wir die Angabe des Datentyps nicht, da die Anwendung schon allein durch den Kontext gegeben ist. Wahrheitswerte dürfen nur die Werte true oder false annehmen, ein Integer, der als Wahrheitswert dient, muss in Java durch einen Vergleich deutlich gemacht werden. Im Großen und Ganzen ist die ungarische Notation für Java nicht so richtig übertragbar, macht aber deutlich, dass es notwendig ist, die Namen so zu wählen, dass eine grobe Unterscheidung möglich ist.


Galileo Computing

26.4.2 Vorschlag für die Namensgebungtoptop

Der Bezeichner dient zur Identifizierung einer Variablen (somit auch einer Konstante), Funktion oder Klasse und muss innerhalb eines Geltungsbereichs eindeutig sein. In verschiedenen Geltungsbereichen können dagegen die gleichen Bezeichner verwendet werden:

gp Namen dürfen nur aus bestimmten Zeichen gebildet werden. Buchstaben und Ziffern sind erlaubt, und auf das Unterstreichungssymbol »_« sollte verzichtet werden. Ausnahmen können zusammengesetzte Wörter sein, die mit einem Großbuchstaben enden, wie beispielsweise currentIO_Stream. Wenn möglich, sollten aber Zeichenketten in Großbuchstaben aufgelöst werden. So sollte MyABCExam zu MyAbcExam werden, die Alternative MyABC_Exam ist nicht so gut.
gp Setzt sich ein Bezeichnername aus mehreren Wörtern zusammen, so werden diese zusammengeschrieben und die jeweiligen Anfangsbuchstaben groß gesetzt. (KaugummiGenerator, anzahlKaugummis).
gp Von Sonderzeichen sollte Abstand genommen werden, auch wenn Java diese Zeichen zulässt, da sie im Unicode-Zeichensatz definiert sind.
gp Es dürfen keine Bezeichner gewählt werden, die sich nur in der Groß- beziehungsweise Kleinschreibweise unterscheiden. Java achtet auf Groß- und Kleinschreibung, so dass jedoch xyz und XYZ für eine Variable und eine Konstante verwendet werden können. Wir sollten also nicht die Funktion makeMyDay() und irgendwo die Boolean-Konstante MakeMyDay einsetzen, da dies zu Verwirrungen führt, obwohl es formal zulässig wäre.
gp Namen mit einer Mischung aus Buchstaben und Ziffern können schwer zu lesen sein. So ist I0 (i-Null) zu leicht mit IO (i-o) zu verwechseln, auch die Zeichenkette l1 mit der Ziffer 1 und dem Kleinbuchstaben l sehen auf manchen Druckern gleich aus, und dies gilt ebenso bei schlechten Zeichensätzen.
gp Die vom System verwendeten Namen von Klassen, Methoden und Attributen sollten nicht, auch nicht abgewandelt, im eigenen Programm verwendet werden. Die Verwechslungsgefahr mit Funktionen, die etwas ganz anderes bewirken, ist damit geringer.
gp Unaussprechbare Namen dürfen nicht vergeben werden. Ein aussagekräftiger langer Name ist besser als ein kurzer, dessen Aufbau sich nicht erkennen lässt. So ist resetPrinter ein besserer Name als rstprt.
gp Namen dürfen keine Abkürzungen enthalten, die nicht allgemein anerkannt sind. So ist der Bezeichner groupID sicherlich besser als gopID.
gp Bei Abkürzungen ist darauf zu achten, dass diese nicht missverstanden werden können. Heißt termProcess() vielleicht »terminiere den Prozess«, oder besteht die Verbindung zu einem »Terminal-Prozess«?
gp Bezeichner von Variablen und Methoden beginnen mit kleinen Buchstaben (int myAbc; float downTheRiverside; boolean haveDreiFragezeichen).
gp Bezeichner von Klassen beginnen mit großen Buchstaben (class OneTwoTree).
gp Bezeichner müssen »sprechend«, also selbsterklärend gewählt werden.
gp Ausnahme bilden Schleifenzähler. Diese werden oft einbuchstabig gewählt, wie i, k.
gp Konstanten schreiben wir vollständig groß mit Unterstrichen an den Wortgrenzen. Damit vermeiden wir von vornherein das Problem, auf eine Konstante versehentlich schreibend zugreifen zu wollen.
gp Die Klassen sollen so benannt werden, dass die Methoden in Referenz.Methodennamen einfach zu lesen sind.

Lange und komplizierte Funktionsnamen sollten vermieden werden. Wir müssen uns jetzt daran erinnern, was bei langen Klassen- und Funktionsnamen passieren kann:

CD_Recorder.getTheOwnerOfPlayer().printNameAndAgeOfPerson()

Die anderen Regeln über sprechende Namen habe im Zweifelsfall aber Vorrang.

Speziell für Java und objektorientierte Sprachen gibt es noch ein paar weitere Faustregeln: Methodennamen beginnen mit Verben, Klassennamen sind Substantive und Schnittstellennamen bevorzugt Adjektive.

Es sollte zudem keine Funktion geben, die den Namen einer Klasse trägt. Denn eine Funktion mit einem Rückgabetyp muss von einem Konstruktor unterschieden werden. Jedoch ist eine Funktion mit dem Namen der Klasse möglich aber sehr verwirrend.





Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de