D-Programmierung: Das erste Programm

Aus Wikibooks

Wechseln zu: Navigation, Suche
Nuvola apps bookcase 1.svg D-Programmierung Nuvola mimetypes dvi.png Das erste Programm

Inhaltsverzeichnis


[Bearbeiten] Das erste Programm

Zu Beginn stelle ich Dir ein sehr einfaches Programm vor: Das berühmte Hello-World-Programm. Bekannt wurde es das erste Mal durch das Buch „The C Programming Language“ von Kernighan und Ritchie. Seit dem wurde es in tausenden von Programmierbüchern, als das erste Programm vorgestellt und wahrscheinlich schon von Millionen von angehenden Programmierern geschrieben. Auch ich möchte diese Tradition nicht brechen, oder gar Dir dieses Stück Geschichte vorenthalten.

Das Programm ist einzig und allein dafür da in die Konsole den Text: Hello, World! zu schreiben. Worauf Du im Allgemeinen achten solltest, ist dass die Sprache D zwischen Groß- und Kleinschreibung unterscheidet. Das ist keine Selbstverständlichkeit, es gibt Sprachen wie z.B. BASIC oder Pascal, wo es egal ist, wie man schreibt.

Öffne jetzt Deinen Editor/IDE (oder was Du verwendest um Text-Dateien zu erstellen) und fange an, Zeile für Zeile, den Quelltext einzutippen:

 import std.stdio;
 
 void main()
 {
    writefln("Hello, World!");
 }

Speichere jetzt die Datei irgendwo unter dem Namen hello.d Öffne die Konsole in diesem Verzeichnis. Wenn Du den D-Compiler richtig installiert hast, dann gib dort folgende Zeile ein:

dmd hello.d

Dadurch versucht der Compiler die Quelltext-Datei zu kompilieren und gleichzeitig zu linken. Wenn da irgendwelche Fehlermeldungen erscheinen, so hast Du irgendetwas im Quelltext falsch eingegeben.

Wenn Du aber alles richtig gemacht hast, so sollte jetzt im selben Verzeichnis, in dem sich auch hello.d befindet eine ausführbare Datei mit dem Namen hello.exe liegen. Alle anderen Dateien, die dabei auch erzeugt wurden, kannst Du getrost löschen.

Wenn Du sie direkt vom Windows aus ausführst merkst Du wahrscheinlich gar nicht, dass überhaupt etwas geschehen ist, weil das Programm am Ende beendet und das Fenster sehr schnell geschlossen wird. Damit Du die Auswirkungen deines Schaffens mitbekommst, starte die Konsole. Wechsele ins entsprechende Verzeichnis und gebe in die Konsole folgendes ein:

hello

Als Ausgabe solltest Du, wie erwartet, das sehen:

Hello, World!

Da Du jetzt wahrscheinlich wissen willst, was all die Wörter und Zeichen bedeuten, die Du eingetippt hast, folgt hier die Erklärung.

 import std.stdio;

import weist darauf hin, dass eine Bibliothek importiert werden soll. Danach folgt der Name der Bibliothek. Da bei diesem Programm die Ausgabe in der Konsole gebraucht wird, muss eine entsprechende Funktion gefunden werden. Sie befindet sich in der Bibliothek namens std.stdio.

 void main()

Das ist die Funktion, die beim Programmstart aufgerufen wird. Sie sollte bei jedem Programm vorhanden sein.

 {

Mit einer geschweiften Klammer beginnt der Funktionskörper. Er enthält zwischen den geschweiften Klammern Befehle, die ausgeführt werden müssen. Am Schluss steht natürlich die Schlussklammer }.

 writef("Hello World!");

Hier wird die Funktion mit dem Namen writef() aufgerufen. Sie gibt einen Text in der Konsole aus. Innerhalb der runden Klammern sind die Parameter, die an die Funktion übergeben werden. Hier wird nur ein Text ausgegeben. Text wird in Programmierer-Sprache Zeichenkette genannt oder String auf Englisch. Eine Zeichenkette muss immer innerhalb von "-Zeichen stehen.

Nach der geschlossenen Klammer folgt ein Semikolon. Das ist immer erforderlich um einen Befehl abzuschließen. Das hat aber auch den Vorteil, dass man einen Befehl nicht unbedingt in einer Zeile schreiben muss.

[Bearbeiten] Vertiefung und Aufgaben

Die Übungsaufgaben sind am Anfang nicht besonders anspruchsvoll. Aber so lernst Du welche Änderungen was bewirken. Als Grundlage für die Aufgaben dient der Quelltext von hello.d.

[Bearbeiten] Formatierung

Leerzeichen (auch Tabulatoren und Zeilenumbrüche) werden ignoriert, solange sie ein Wort nicht in zwei oder mehr Wörter aufteilen. Die Formatierung, die ich verwende ist nicht zwingend notwendig. Aber es ist besser sich irgendeine anzugewöhnen. Zum Beispiel ist es lesbarer jede Anweisung in eine eigene Zeile zu schreiben. Außerdem sollte der Quelltext innerhalb der geschweiften Klammern, auch Anweisungsblock genannt, eingerückt werden.

Deswegen besteht die erste Aufgabe darin, an möglichen (und unmöglichen) Stellen Leerzeichen und Umbrüche einzufügen und die Auswirkungen davon zu beobachten.

Hier noch ein funktionsfähiges Beispiel zur Inspiration:

 import 
 std.stdio;
 
 void 
 main
 (
 ){
 writef
 (
 "Hello world!"
 )
 ;}

Du könntest z.B. einzelne Wörter (die Zeichenkette auch) voneinander trennen und was passiert.

[Bearbeiten] Mehr als nur ein Befehl

Verändere den Quelltext von hello.d, so dass writefln() einen anderen Text ausgibt. Versuche dabei mehrere writef()-Aufrufe zu schreiben, auch mit verschiedenen Texten.

Was fällt dir auf, wenn du versuchst mehrzeiligen Text zu schreiben, oder Anführungsstriche auszugeben?

[Bearbeiten] Mehrzeiligen Text ausgeben

Wie Du in der vorherige Aufgabe festgestellt hast, ist es nicht möglich "-Zeichen in die Konsole zu schreiben. Denn wenn Du es auf diese Weise schreibst: "Und er sprach: "Es werde Licht".", merkst Du (spätestens beim Kompilieren), dass da was falsch ist.

Damit es aber trotzdem machbar ist, gibt es in D mehrere Alternativen. Um am Anfang nicht den Überblick über die scheinbar endlosen Befehle und Regeln zu verlieren, werde ich Dir vorerst nur eine Regel beibringen, die in den meisten Fällen ausreichend ist. Viele Sprachen haben auch nur diese eine, die anderen kannst du selbst dann in der Dokumentation nachlesen.

Die Lösung des Problems heißen Escape-Sequenzen. Sie werden mit einem \-Zeichen eingeleitet. Was danach folgt, wird auf besondere Weise behandelt. Das heißt, wenn Du die zwei inneren Anführungsstriche durch \" ersetzt, so wird der Quelltext als fehlerlos akzeptiert. Die \-Zeichen werden natürlich nicht angezeigt. Was ist, wenn Du aber genau das \-Zeichen anzeigen lassen willst? Glücklicherweise gibt es noch mehr solcher Escape-Sequenzen:

Sequenz Bedeutung
\' Stellt ein ' dar. Innerhalb von "" kannst Du das Apostroph auch normal einfügen.
\" "
\\ \
\n Zeilenvorschub
\r Carriage-Return. Das heißt, nach diesem Zeichen werden alle darauf folgenden, wieder am Anfang der Zeile geschrieben. Beispiel: "hello\rworld" ergibt als Ausgabe: world

Anmerkung: Unter Windows werden Zeilenumbrüche durch \r\n Zeichen dargestellt. Die meisten anderen Betriebssysteme begnügen sich nur mit einem \n.

Zur Veranschaulichung: Mit \r wird der Cursor an den Anfang der Zeile verschoben. Der Text der danach kommt überschreibt den vorhergehenden.

Um ein konkretes Beispiel zu geben, öffne einen Editor, schreibe einen x-beliebigen Text. Setze den Cursor an den Anfang der Zeile und drücke die [Einf]-Taste. Gebe schließlich erneut irgendeinen Text ein. Der vorherige wird nun überschrieben.

Um bei dieser Analogie zu bleiben: \n bewegt den Cursor eine Zeile nach unten.

\b Löscht das vorherige Zeichen. (Nur eins)
\? Stellt das Zeichen ? dar. Dazu ist aber zu sagen, dass dies auch ohne \ funktioniert.
\t Tabulator

Es gibt noch viele Befehle mehr, aber manche haben unter Windows keine Auswirkungen. Um andere zu erklären, muss ich noch weiter in die Theorie über Zeichenketten und ihre Darstellung im Speicher einsteigen. Dazu werde ich zu einem späteren Zeitpunkt kommen.

Nuvola apps bookcase 1.svg D-Programmierung Nuvola mimetypes dvi.png Das erste Programm
Persönliche Werkzeuge