Gewusst wie: Bestimmen, ob ein optionaler Parameter angegeben wurde
Aktualisiert: November 2007
Wenn eine Prozedur einen optionalen Parameter definiert, muss möglicherweise ermittelt werden, ob im Aufrufcode das entsprechende Argument angegeben oder weggelassen wurde.
Wenn ein Vergleich ergibt, dass der Parameterwert dem Standardwert entspricht, kann dies einen von zwei möglichen Gründen haben:
Im Aufrufcode wurde das Argument im Prozeduraufruf nicht angegeben. Oder:
Im Aufrufcode wurde das Argument mit einem Wert angegeben, der genau dem Standardwert des Parameters entspricht.
Der Prozedurcode kann zwischen diesen beiden Möglichkeiten nicht unterscheiden. Häufig ist es nicht von Belang, aber manchmal muss die Prozedur in jedem der beiden möglichen Fälle etwas anderes ausführen. Der praktikabelste Ansatz besteht darin, eine unwahrscheinlichen Wert als Standardwert zu definieren, obwohl dies keine Garantie dafür ist, dass der Aufrufcode diesen Wert nicht angeben kann.
Wenn absolute Gewissheit darüber bestehen muss, ob das aufrufende Programm ein optionales Argument angegeben hat, ist es am sichersten, überladene Versionen der Prozedur zu definieren. Siehe Gewusst wie: Definieren mehrerer Versionen einer Prozedur und Überlegungen zur Prozedurüberladung.
So stellen Sie fest, ob ein Argument an einen optionalen Parameter übergeben wurde
Definieren Sie einen äußerst unwahrscheinlichen Wert als Standardwert für den Parameter.
Wenn es sich beim optionalen Parameter um einen Verweistyp wie String handelt, kann Nothing als Standardwert verwendet werden, sofern dieser kein zu erwartender Wert für das Argument ist.
Vergleichen Sie im Prozedurcode den Parameter mit dem Standardwert, und führen Sie die entsprechende Aktion aus.
Überladen einer Prozedur mit und ohne optionalen Parameter
Eine weitere Möglichkeit, eine Prozedur mit optionalen Parametern zu definieren, ist das Überladen. Wenn ein optionaler Parameter vorhanden ist, können Sie zwei überladene Versionen der Prozedur definieren, eine Version, die den Parameter akzeptiert, und eine Version, die ihn nicht akzeptiert. Mit steigender Anzahl an optionalen Parametern wird dieses Konzept jedoch komplizierter. Allerdings hat es den Vorteil, dass Sie immer genau wissen, ob das aufrufende Programm jedes optionale Argument angegeben hat.
So definieren Sie verschiedene Versionen der Prozedur, um der Angabe und Auslassung eines Arguments Rechnung zu tragen
Definieren Sie eine Version der Prozedur mit dem Parameter in der Argumentliste. Deklarieren Sie den Parameter nicht als Optional.
Definieren Sie eine andere Version der Prozedur ohne den Parameter. Die Deklaration sollte ansonsten mit der der ersten Version identisch sein.
Platzieren Sie den entsprechenden Code für die einzelnen Aufrufe in der jeweiligen Version der Prozedur.
Beispiel
In der folgenden Prozedur wird der optionale Parameter office definiert und überprüft, ob er seinen Standardwert QJZ aufweist, um festzustellen, ob er im Aufruf ausgelassen wurde.
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub
Wenn im Aufrufcode in der Argumentliste kein Wert für office angegeben wurde, stellt Visual Basic den Standardwert "QJZ" bereit.
Wenn es sich beim optionalen Parameter um einen Verweistyp wie String handelt, kann Nothing (Visual Basic) als Standardwert verwendet werden, sofern dieser kein zu erwartender Wert für das Argument ist.
Ein Beispiel dafür, wie sich mithilfe von Überladungen feststellen lässt, ob ein optionaler Parameter übergeben wurde, finden Sie unter Gewusst wie: Überladen einer Prozedur mit optionalen Parametern.
Siehe auch
Aufgaben
Gewusst wie: Definieren optionaler Parameter für eine Prozedur
Gewusst wie: Aufrufen einer Prozedur mit optionalen Parametern
Konzepte
Parameter und Argumente von Prozeduren
Übergeben von Argumenten als Wert und als Verweis
Argumentübergabe nach Position und Namen