Programmierkonventionen

Programme sollten immer so geschrieben werden, dass sie für andere (Tutoren, weitere Entwickler) nicht unnötig schwer zu verstehen sind:

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. — Damian Conway

Trotzdem gibt es nicht eine "richtige" Art zu programmieren. Grob lassen sich aber drei Felder ausmachen, in denen es bestimmte Regeln gibt:

Bezeichner

Klassen, Methoden und Variablen sollten immer sinnvoll benannt werden (bis auf Ausnahmen wie Laufvariablen in Schleifen), aber nicht übermässig lang sein. Wenn mehrere Wörter verbunden werden, sollten die Wörter entweder mit _ getrennt werden oder jedes Wort mit einem Großbuchstaben begonnen werden. Klassennamen sollten immer mit einem Großbuchstaben beginnen, Variablen und Methoden mit einem Kleinbuchstaben.

Negativbeispiele:

  int sL(String[] a) {
    int r = 0;
    for (int i = 0; i < a.length; i++) {
      r = r + a[i].length();
    }
    return r;
  }
   
  int summeDerLaengenDerStringsEinesStringArrays(String[] stringArray) {
    int summeDerLaengenDerStrings = 0;
    for (int wievieltesAngeschautesElement = 0; wievieltesAngeschautesElement < stringArray.length; wievieltesAngeschautesElement++) {
      summeDerLaengenDerStrings = summeDerLaengenDerStrings + stringArray[wievieltesAngeschautesElement].length();
    }
    return summeDerLaengenDerStrings;
  } 
   

Ein sinnvoller Mittelweg zwischen diesen Beispielen ist die folgende Funktion:

  int sumOfLengths(String[] daten) {
    int res = 0;
    for (int i = 0; i < daten.length; i++) {
      res = res + daten[i].length();
    }
    return res;
  } 
   

Einrückung

Anweisungen sollten jeweils in ihrer eigenen Zeile stehen. Jede semantische Ebene sollte um mindestens ein Leerzeichen eingerückt werden. Eine Ebene ist z.B. das "Innere" eines bedingten Codeblocks oder ein Schleifenkörper. Die zugehörigen schließenden geschweiften Klammern sollten dabei so stehen, dass klar ist, auf welche öffnende Klammer sie sich beziehen.

Negativbeispiele:

  while (foo()) { if (x < y) 
      x = y; r = x*y;
  }
   
  for (int i = 12; i > 0; i--) {
    for (int j = i*i; j > 0; j >> 1) {
      foo(); }}
    bar();
   

Klarere Versionen sind die folgenden:

  while (foo()) { 
    if (x < y){
      x = y;
    }
    r = x*y;
  }
   
  for (int i = 12; i > 0; i--) {
    for (int j = i*i; j > 0; j >> 1) {
      foo(); 
    }
  }
  bar();
   

Kommentare

Einzeilige Kommentare werden mit // eingeleitet, mehrzeilige Kommentare mit /* begonnen und mit */ beendet. Ein Kommentar sollte kurz und prägnant dokumentieren, welche Funktionalität der kommentierte Programmteil hat. Ist ein Kommentar ähnlich lang wie der kommentierte Code und ergänzt ihn nicht um wertvolle zusätzliche Informationen, ist er nicht nötig und sollte entfernt werden.

Für Klassen sollte jeweils vermerkt werden, welche Funktionalität zur Verfügung gestellt wird; für Methoden ist ggf. zu notieren, welche Seiteneffekte sie haben oder welche nicht im Typ der Parameter kodierten Voraussetzungen zutreffen müssen.