Sonderkapitel: Stil

9.1 Blöcke:
9.1.1 Einrücken von Anweisungen
Ein wichtiges stilistisches Merkmal beim Programmieren ist das Einrücken von Anweisungen. Es verbessert Übersichtlichkeit und macht direkt darauf aufmerksam, dass der Programmierer gut ist. In NIKI sind so genannte blanc spaces für die Programmausführung trivial. Daher kann man sie setzen, so oft man will. Jedoch ist es sinnvoller, wenn man gezieltes einrücken beherrscht. Am sinnvollsten ist das Einrücken in Blöcken. Ein Block wird (meistens) mit BEGIN eingeleitet und endet mit END. Alles, was dazwischen steht, wird eingerückt, d.h. die Zeile wird mit einem oder wahlweise zwei Leerzeichen (mehr) begonnen. Ein Beispiel:

PROCEDURE einruecken;
BEGIN
 vor;
 vor;
 vor;
END;


Die Anweisungen sind alle um ein Leerzeichen eingerückt. Natürlich kann es auch vorkommen, dass ein Block in einem anderen enthalten ist. Das nennt man dann eine Verschachtelung. So ist es z.B. möglich, dass eine IF-Anweisung in einer Prozedur steht. Auch hier wird weiter eingerückt, also verschachtelt:

PROCEDURE verschachteln;
BEGIN
 vor;
 vor;
 IF vorne_frei THEN
 BEGIN
  vor;
  drehe_links;
  vor;
 END;
END;


In diesem Beispiel ist ein Block in einem übergeordneten Block verschachtelt. Auch hier wird er wieder mit BEGIN und END eingeschlossen. Sinnvollerweise wurden die drei Anweisungen in der IF-Abfrage ein weiteres Leerzeichen eingerückt.
Angenommen, wir würden die beiden Prozeduren hintereinander deklarieren. Wäre es dann übersichtlicher, wenn wir direkt die eine an die andere schreiben? Auf keinen Fall!!! Dazwischen sollte man immer eine Leerzeile einfügen, also etwa so:

PROCEDURE einruecken;
BEGIN
 vor;
 vor;
 vor;
END;

PROCEDURE verschachteln;
BEGIN
 vor;
 vor;
 IF vorne_frei THEN
 BEGIN
  vor;
  drehe_links;
  vor;
 END;
END;


Man erkennt sofort, wo die eine Prozedur endet und die andere anfängt. Das hilft insbesondere dann, wenn man eine Prozedur suchen muss. So erkennt man sie direkt ohne Probleme.

9.1.2 Sinn von Blöcken:
Wie wir eben gesehen haben, verhelfen Blöcke zur Übersichtlichkeit. Alleine das Einrücken lockert den Quellcode auf. Die Zeilen, die man zwischen zwei Prozeduren frei lässt, helfen beim Suchen. Hätten wir keinen Wert darauf gelegt, Blöcke zu nutzen, hätten wir in etwa das hier:

PROCEDURE einruecken;
BEGIN
vor;
vor;
vor;
END;
PROCEDURE verschachteln;
BEGIN
vor;
vor;
IF vorne_frei THEN
BEGIN
vor;
drehe_links;
vor;
END;
END;


Gut, Geschmäcker sind verschieden, aber hier findet man sich doch nicht mehr zurecht! Und es sind ja nur zwei Prozeduren! Was, wenn man mal 15 deklarieren will? Der Quellcode würde zum Monstrum, das seines Gleichen sucht! Daher sollte man sich immer bewusst machen, dass Blöcke uns helfen und nicht stören sollen.

9.1.3 Kommentare für Blöcke
Wie wir schon im Sonderkapitel 8 gelernt haben (oder hätten lernen sollen), sind Kommentare äußerst nützlich. Aber es stellt sich doch die Frage, ob eine Kommentargebung wie folgt sinnvoll ist:

PROCEDURE kommentare;
BEGIN
 vor;    { geht 1 nach vorne }
 drehe_rechts;    { dreht 3x nach links }
 drehe_um;    { drehe 2x nach links }
END;


Und die Antwort: NEIN! Es würde der Kommentar { geht nach vorne und dreht sich dann nach links } völlig reichen. Und dieser Kommentar kann dann auch hinter den Prozedurnamen, damit man sofort sieht, was NIKI vorhat. Also das Beispiel von oben:

PROCEDURE kommentare;    { geht nach vorne und dreht sich dann nach links }
BEGIN
 vor;
 drehe_rechts;
 drehe_um;
END;


Und schon ist der Quellcode gerettet!

9.2 Groß- und Kleinschreibung:
9.2.1 Groß- und Kleinschreibung als Stil?
Die Frage, ob Groß- und Kleinschreibung wirklich als stilistisches Mittel angesehen werden kann, ist beim programmieren oft nicht wirklich relevant. Viele Programmierer achten auf Groß- und Kleinschreibung, andere nicht. Jedoch erhöht auch das die Übersichtlichkeit um ein Vielfaches. In den Beispielen oben habe ich ja bereits auf Groß- und Kleinschreibung geachtet. Wir unterscheiden dadurch einfacher zwischen Befehlen und reservierten Begriffen. Aber was wird denn nun groß bzw. klein geschrieben?

9.2.2 Was wird groß und was wird klein geschrieben?
Prinzipiell werden folgende Wort komplett groß geschrieben:

PROGRAM
PROCEDURE
BEGIN
END
IF
THEN
ELSE
WHILE
DO
REPEAT
UNTIL


Alles andere sollte immer komplett klein geschrieben werden. Auch Programm- oder Prozedurnamen werden i.d.R. nur klein geschrieben. Setzen sie sich aus mehreren Worten zusammen, nutzt man Unterstriche (_) zur Trennung, also etwa so:

neue_prozedur

Ist doch einfach, oder?

9.3 Namen:
9.3.1 Sinn des Wählens aussagekräftiger Namen für Prozeduren
Kommentare haben wir bereits kennen gelernt, um uns zu merken, was eine Prozedur im Einzelnen tut. Aber noch viel wichtiger als das sind aussagekräftige Namen. Mit einem Prozedurnamen wie drehe_rechts kann man i.d.R. deutlich mehr anfangen als mit einem wie v0l3 (v0 steht für 0 Schritte vor und l3 für 3x links)! Man kann zwar damit arbeiten, aber niemand anderes würde eine solche Logik nachvollziehen wollen (und evtl. auch können). Noch etwas: in der Kürze liegt die Würze! Ellenlange Namen enthalten zwar mehr Information, werden aber nur ungern noch mal an der Stelle eingetippt, an der sie verwendet werden sollen. Daher ist eine gelungene Abkürzung der richtige Name. drehe_rechts ist deutlich schneller einzutippen als drehe_um_und_dann_nochmal_links, auch wenn man beim letzteren den Kommentar weglassen kann. Beide sagen dasselbe aus und daher ist die kurze Version besser.