Visual Basic .NET: Hello World


Hinweis: In diesem und allen nachfolgenden Kapiteln wird der Code dargestellt, wie er unter Microsoft Visual Basic 2008 entstehen würde. In diesem Kapitel werden die marginalen Unterschiede zum SharpDevelop-Äquivalent aufgezeigt.

Quellcodestruktur

Bearbeiten

Nachdem wir nun erfolgreich unser erstes Projekt kompiliert haben, wollen wir einen Blick auf den Code an sich werfen.

  Code:  

Module Module1

    Sub Main()
        System.Console.WriteLine("Hello World.")
        System.Console.ReadLine()
        End
    End Sub

End Module

Strukturelemente

Bearbeiten

Wir definieren hier ein sogenanntes Modul, eine Zusammenfassung von Funktionen eines Programmes. Das Modul hier heißt Module1, bei SharpDevelop wäre der Name Main. Damit bekannt ist, welcher Code zu diesem Modul gehört, muss dieser Code in Module Module1 und End Module eingeschlossen werden. Das wollen wir jetzt so akzeptieren. Zunächst wollen wir uns auch damit begnügen, nur ein Modul zu verwenden und allen Code in den Definitionsbereich dieses Moduls, also zwischen Module Module1 und End Module zu notieren.

Programme bestehen aus bestimmten Abschnitten, sogenannten Funktionen, die voneinander weitgehend unabhängig sind. Diese Aufteilung dient dazu, bestimmte Aktionen einzeln auszuführen. Zum Beispiel wird beim Druck auf den "OK"-Button eines Dialogfeldes eine andere Aktion ausgeführt als beim Druck auf den „Abbrechen“-Button. Diese beiden Aktionen sind in unterschiedlichen Funktionen definiert. Allgemein wird eine Funktion in Visual Basic von Sub und End Sub umschlossen. Im obigen Code wird eine Funktion namens Main definiert. (Das Klammerpaar hinter dem Namen ist für uns erst einmal uninteressant.) Jedes Programm darf nur eine Funktion mit dem Namen Main haben, sie wird aufgerufen, wenn das Programm gestartet wird. Sobald diese Funktion abgearbeitet wurde, also der komplette Code darin ausgeführt wurde, wird das Programm beendet.

Befehlselemente

Bearbeiten

Die Funktion Main enthält drei weitere Zeilen Code.

  Code:  

        System.Console.WriteLine("Hello World.")
        System.Console.ReadLine()
	End

Bei diesen zwei Zeilen handelt es sich um Befehle. Dieser Code unterscheidet sich von dem, den wir bisher kennengelernt haben. Während der vorherige Code nur das Verhalten bestimmter Codebereiche bestimmt, legen Befehle konkrete Aktionen fest, die vom Computer ausgeführt werden.

Die ersten zwei Befehle sind Funktionsaufrufe. Das heißt, dem Computer wird mitgeteilt, eine bestimmte Funktion auszuführen, die zum Programm gehört. In den Klammern werden nach einem bestimmten Schema weitere Informationen übermittelt, die für die Ausführung der Funktion wichtig sind. (Hier handelt es sich einmal um eine Zeichenkette und einmal um nichts, d.h. die zweite Funktion braucht keine Zusatzinformationen.)

Der Teil vor der Klammer ist der Name der aufzurufenden Funktion. Sie wundern sich vielleicht, wie das Programm eine Funktion namens System.Console.WriteLine ausführen kann, wo doch schließlich nur Main definiert wurde. Dazu muss man wissen, dass .NET, wie bereits erklärt, viele Tausende von Objekten bereitstellt, die alltägliche Aufgaben vereinfachen. Diese sind in sogenannten Namensräumen geordnet, so wie Dateien in Ordnern einsortiert werden. Dabei können Namensräume auch Unternamensräume enthalten, so wie Ordner Unterordner enthalten können. Der Stammnamensraum von .NET, in dem alle anderen Objekte und Namensräume enthalten sind, heißt schlicht und einfach System. Der System-Namensraum enthält das Objekt Console. Diese Relation wird in Visual Basic durch die Schreibweise System.Console gekennzeichnet.

Das Objekt System.Console stellt Funktionalitäten zur Benutzung eines Konsolenfensters bereit. Objekte können sogenannte Methoden enthalten, das sind Funktionen, die zum Zwecke der Ordnung dem Objekt zugeordnet sind. Das System.Console-Objekt enthält nur eine Methode namens WriteLine. Diese Methode wird als Funktion über den Bezeichner System.Console.WriteLine aufgerufen. (Analog die Methode ReadLine). Die Funktion WriteLine gibt einen Text aus, gefolgt von einem Zeilenumbruch.

In den Klammern werden nach einem vorgegebenen Schema zusätzliche Informationen übermittelt, die für die Ausführung der Funktion relevant sind. Diese Informationen heißen Parameter, seltener auch Argumente. Eine Entwicklungsumgebung unterstützt Sie beim Aufruf von Funktionen durch die Anzeige der möglichen Schemata, sobald Sie den Cursor in die Klammer setzen oder nach einem Funktionsnamen eine öffnende Klammer eingeben.

Im Falle von System.Console.WriteLine sollte in dem Fenster, in dem diese Informationen erscheinen, oben links auch eine Angabe der Art „1 von 18“, umrandet von 2 Knöpfen mit nach oben und unten zeigenden Pfeilen, zu sehen sein. Dies bedeutet, dass für die Parameter mehrere Schemata existieren, in diesem Fall 18. Man sagt, die Funktion ist überladen. Mit den 2 Knöpfen oder den Pfeiltasten können Sie durch die Schemata blättern. (In Microsoft Visual Basic 2008 verwenden wir im vorliegenden Code etwa das 14. Schema.) Bis jetzt sehen die Schemata noch sehr kryptisch aus, das wird sich jedoch bald ändern.

Der zweite Befehl ist ein sehr interessantes Beispiel, wie man Sachen, die eigentlich für etwas anderes gedacht waren, für die eigenen Zwecke missbrauchen kann. Unser Problem wäre, dass ein Programm, das nur aus einem WriteLine-Befehl besteht, sofort beendet werden würde, da nichts mehr zu tun ist. Dann würde das Konsolenfenster zusammen mit der Ausgabe sofort verschwinden. (Probieren Sie es ruhig noch einmal aus, indem Sie den ReadLine-Befehl löschen.)

Die ReadLine-Methode soll eigentlich der Eingabe eines Wertes durch den Benutzer dienen. Diese Eingabe wird durch [Enter] abgeschlossen und erst, wenn die Eingabe erfolgt ist, wird das Programm fortgesetzt. In unserem Fall interessiert uns die Eingabe nicht (wir werden später sehen, wie man mit Eingaben umgeht), stattdessen ist für uns nur wichtig, dass das Programm angehalten ist, bis [Enter] gedrückt wurde. In dieser Zeit kann die Ausgabe in Ruhe gelesen werden.

Jetzt schauen wir uns noch den dritten Befehl an. Dieser Befehl enthält keine Klammern und besteht, wie die Syntaxhervorhebung offenbart, nur aus einem Schlüsselwort, nämlich End. Der Befehl folgt offensichtlich nicht der Klammersyntax für Funktionen (die übrigens auch gilt, wenn gar keine Parameter benötigt werden; es erscheint dann nur ein leeres Klammernpaar, siehe z.B. ReadLine). Die Erklärung ist denkbar einfach: Dieser Befehl ist keine Funktion, sondern eine Anweisung. Während Funktionen nur einem bestimmten formalen Schema folgen und konkrete Funktionen nicht explizit zur Sprache Visual Basic gehören (es handelt sich lediglich um Ergänzungen), sind bestimmte Anweisungen per Definition in Visual Basic enthalten, man kann auch keine neuen Anweisungen definieren.

Die End-Anweisung ist eine der einfachsten, sie beendet das Programm sofort. In diesem Fall ist das eigentlich gar nicht nötig, da das Programm sowieso beendet wird, wenn die Befehle in der Funktion Main abgearbeitet wurden. Deshalb diente uns die End-Anweisung hier auch nur als Beispiel für Anweisungen und wird im Folgenden erstmal nicht mehr verwendet. Dafür werden wir gleich einige andere Anweisungen kennen lernen.

Versuchen Sie zunächst, das Programm um eine Meldung zu ergänzen, die erklärt, dass ein Druck auf [Enter] das Programm beendet. So sieht das dann beispielsweise aus:

  Code:  

Module Module1

    Sub Main()
        System.Console.WriteLine("Hello World.")
        System.Console.WriteLine()
        System.Console.Write("Drücken Sie [Enter], um das Programm zu beenden.")
        System.Console.ReadLine()
        End
    End Sub

End Module

Hier habe ich noch durch einen WriteLine-Befehl ohne Parameter eine zusätzliche Leerzeile eingefügt. Das können Sie jederzeit machen, um die Ausgabe Ihrer Programme übersichtlicher zu gestalten. Außerdem steht hier bei der Aufforderung, [Enter] zu drücken, nicht WriteLine, sondern nur Write. Diese Methode gibt lediglich den gewünschten Text aus, ohne einen Zeilenumbruch danach einzufügen. Dadurch erscheint der Cursor nicht unter, sondern direkt hinter der Aufforderung. Testen Sie den Unterschied zwischen Write und WriteLine einmal selber, indem Sie in dem obigen Programm Aufrufe der einen durch Aufrufe der anderen Methode ersetzen oder ein völlig eigenes Beispiel schreiben. Beachten Sie vor allem, dass Zeichenketten immer von Anführungszeichen umschlossen sein müssen.