In Visual Basic (sowohl Classic als auch .NET) können für Prozeduren und Funktionen optionale Parameter mit dem Schlüsselwort Optional deklariert werden. Es ist auch möglich, Standardwerte für solche Parameter festzulegen.
Syntax:
Sub SendMessage(message As String, Optional urgent As Boolean = False) If urgent Then Console.WriteLine("DRINGEND: " & message) Else Console.WriteLine(message) End If End Sub ' Aufrufe: SendMessage("Hallo!") ' urgent = False SendMessage("Wichtige Nachricht!", True)
Wichtige Nuancen:
OptionalParameter müssen immer zuletzt in der Parameterliste stehen.- Wenn kein Standardwert für einen Parameter vorhanden ist, wird er als
Nothingoder standardmäßig für den Typ definiert (z.B. 0 für Integer).- In klassischem VB sind die Optionen für optionale Typen eingeschränkt: es können keine Typen ohne einen Standardwert verwendet werden (z.B. nicht-nullbare Klassen).
Frage: Kann man in Visual Basic einen erforderlichen Parameter nach einem optionalen (Optional) deklarieren? Erläutern Sie warum (nein/ja) und wie man dies vermeidet.
Antwort: Nein, nach der Deklaration eines beliebigen Parameters als Optional müssen alle nachfolgenden Parameter ebenfalls als Optional deklariert werden. Dies ist eine syntaktische Anforderung, um Verwirrung bei der Übergabe von Parametern nach Positionen zu vermeiden.
Beispiel für fehlerhaften Code:
Sub PrintReport(Optional pageSize As String = "A4", copies As Integer) ' Compilerfehler: Erforderliche Parameter dürfen nicht nach Optional stehen End Sub
Um dies zu lösen, ändern Sie die Reihenfolge der Parameter:
Sub PrintReport(copies As Integer, Optional pageSize As String = "A4") ' Korrekte Variante End Sub
Geschichte
In einem großen Projekt fügte der Kunde einen optionalen Parameter zur Datei-Sharing-Prozedur hinzu, wobei er den erforderlichen Standardwert vergas. Bei einem Aufruf der Methode ohne Angabe des Parameters wurde
Nothingals Dateiname behandelt, was zu einem Ladefehler führte.
Geschichte
Durch das Kopieren der Methoden-Signatur aus einem anderen System wurde die Reihenfolge der Parameter gestört – der erforderliche Parameter kam nach dem
Optional. Der Programmierer behob den Compilerfehler lediglich durch Umstellung, berücksichtigte jedoch nicht, dass sich die Nummerierung bei allen Aufrufen verschoben hatte. Dies führte zu fehlerhaftem Verhalten der Funktion an mehr als 30 Stellen im Code.
Geschichte
Um den Code zu verkürzen, wurde beschlossen, einen leeren String als Standardwert für einen String-Parameter zu verwenden. In einigen Fällen unterschied sich jedoch die Verarbeitung eines leeren Wertes von der Verarbeitung eines fehlenden Parameters, was zu illogischem Dialogverhalten führte – anstelle des angezeigten Standardtextes wurde die Form ohne weitere Erklärungen versteckt.