Neben der effizienten Problemlösung zeichnet sich guter Code auch dadurch aus, dass er leicht verständlich ist und damit die Wartung einfacher wird.
- Vernünftige Struktur: Unterteilen in Methoden, keine wilden Sprünge wie goto, break oder continue
- Vernünftige Namen: Die Bezeichnungen müssen dem Inhalt entsprechen.
- Vernünftige Einrückung (Eclipse: [Strg]+[Shift]+[F] oder [Strg]+[I])
- Vernünftige Kommentare
- Implementierungsdokumentation: Ist heutzutage seltener geworden,
da sie schwer aktuell zu halten ist, wenn sie getrennt vom Code
aufbewahrt wird.
Konsequenz: Ausführlichere Kommentare. - Anwenderdokumentation: Wird meist besser nicht vom Entwickler, sondern vom Verkäufer geschrieben. Dann weiß der endlich, was das Programm tut.
Diese Seite versteht sich nicht als Vorschrift, sondern als Vorschlag.
Kommentare
Ein Programm wird auf der Suche nach Fehlern oder Erweiterungen um ein Vielfaches häufiger gelesen als geschrieben oder verändert. Die Lösung, die Ihnen heute noch ganz klar erscheint, fällt Ihnen in einem halben Jahr nicht mehr ein.
Kommentar bis Zeilenende
Der doppelte Schrägstrich kommentiert den Rest der Zeile aus.int meineVar; // Variable wird geboren meineVar = 12; // Variable wird belegt // Egal, was hier passiert, die Variable lebt! } // Variable stirbt
Die Tastenkombination [Strg]+[Shift]+[7] kommentiert bzw. dekommentiert alle Zeilen des markierten Bereichs.
Kommentarklammern
Um einen größeren Bereich zu kommentieren, setzen Sie die Kommentargrenzen /* und */.
/* Die folgende Methode summiere berechnet die Summe aus dem übergebenen Array. Die wird an den Aufrufer zurückgegeben. */ static int summiere(int[] zahlen) {Alles, was zwischen den Kommentargrenzen liegt, wird vom Compiler ignoriert.
Kommentargrenzen können auch innerhalb einer Zeile kommentieren.
int /* dies wird zum Nenner! */ moegliche = 12;Ein anderes Beispiel:
static int verrechne(/* in */ int[] spannung, /* out */ int[] strom) {Die Kommentargrenzen sind nicht schachtelbar.
/* Die folgende Methode summiere berechnet /* die Summe aus dem übergebenen Array. */ Diese Zeile wird der Compiler lesen und einen Fehler melden. */Der Kommentar beginnt bei /* und wird aufgelöst, sobald das erste */ auftaucht. Weitere Kommentaröffnungen /* innerhalb des Kommentars werden ignoriert.
JavaDoc
Mit /** beginnt ein JavaDoc-Kommentar. Der JavaDoc-Kommentar endet mit dem nächsten */.Das besondere von JavaDoc ist, dass man automatisch eine Dokumentation der Klassen und Methoden eines größeren Projekts daraus generieren kann. Dazu ruft man auf der Kommandozeile den Befehl \befehl{javadoc} auf:
javadoc MeineKlasse.javaEs wird ein Dokument in HTML erstellt, dass man sich mit dem Firefox oder sonst einem Browser anschauen kann. Es enthält alle dokumentierten Klassen und Methoden des Projekts.
Unter Eclipse kann man den JavaDoc-Kommentar sehen, wenn man den Cursor über dem Aufruf einer Methode oder der Referenz auf eine Klasse stehen lässt.
Im JavaDoc-Kommentar können über das @-Zeichen bestimmte Parameter hervorgehoben werden. Hier einige Beispiele:
- @author Arnold Willemer
Als Autor wird Arnold Willemer geführt. - @version 1.0
- @param erster Dieser Wert kommt in die Methode rein.
Die Variable heißt erster und wird hervorgehoben. Der folgende Text wird als Beschreibung der Variablen verwendet. Es sind mehrere @param-Einträge pro Methode möglich. - @return gibt die Summe aus all dem zurück.
Bezeichnernamen
- Die Namen von Variablen, Funktionen, Methoden und Klassen benennen ihren Inhalt ("sprechende Namen").
- Methodennamen sollten Verben sein und kleingeschrieben werden.
- Boolesche Methodennamen sollten mit "ist" oder "hat" beginnen.
- Klassennamen beginnen mit einem großen Buchstaben.
- Variablennamen beginnen mit einem kleinen Buchstaben.
- Internationale Sonderzeichen (ä, ö, ß, é, ê, æ, ø) werden von Java zwar toleriert, sollten aber keinesfalls verwendet werden. Ansonsten ist ein auf dem Mac geschriebenes Programm auf einem Windows-Rechner nicht mehr übersetzbar.
- Durchnummerierte Namen (zahl1, zahl2 oder a1, a2, ...) sind nicht akzeptabel.
- Variablennamen mit einem Buchstaben sind bestenfalls bei Indizes erlaubt, also etwa i als Zähler in Schleifen.
Deutsche vs. englische Bezeichner
Für deutsche Bezeichner sprechen:- Muttersprachliche Begriffe sind klarer als fremdsprachliche.
- Hemmschwelle für gute Bezeichner sinkt.
- Verwechslungsgefahr mit Java-eigenen Bezeichnern geringer
- Internationale Firmen benötigen internationale Sprache.
- Englische Bezeichner/Kommentare ermöglichen das Out-Sourcen.
Einrückungen
- Jeder Inhalt des Blocks sollte eingerückt werden.
- Bei einer \befehl{if}-Abfrage oder Schleife ohne Block sollte die Zeile eingerückt werden, die unter der Kontrolle der Abfrage oder Schleife läuft.
- Als Einrückungstiefe empfielt sich 4 Leerzeichen.
- Nach der C-Konvention beginnt die öffnende Blockklammer hinter der Anweisung auf gleicher Höhe wie die Anweisung.
- Nach der Java-Konvention, wird die öffnende Blockklammer an die Zeile der Abfrage oder Schleife angehängt.
C-Konvention
if (bedingung) { // Anweisungen } else { // Anweisungen }Vorteil: Öffnende und schließende Klammer sind auf gleicher Ebene.
Java-Konvention
if (bedingung) { // Anweisungen } else { // Anweisungen }Vorteil: Diese Methode ist kompakter und benötigt weniger Zeilen.
Eclipse-Unterstützung
Mit der Tastenkombination [Strg]+[Shift]+[F] kann der markierte Bereich automatisch formatiert werden. [Strg]+[I] korrigiert die Einrückung.