Parametry opcjonalne (Visual Basic)

Możesz określić, że parametr procedury jest opcjonalny i nie trzeba do niego przekazywać żadnego argumentu w momencie wywołania procedury. Parametry opcjonalne są wskazywane przez Optional słowo kluczowe w definicji procedury. Obowiązują następujące zasady:

  • Każdy parametr opcjonalny w definicji procedury musi określać wartość domyślną.

  • Wartość domyślna dla opcjonalnego parametru musi być wyrażeniem stałym.

  • Każdy parametr występujący w definicji procedury po opcjonalnym parametrze również musi być opcjonalny.

Deklaracja procedury z opcjonalnym parametrem ma następującą składnię:

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

Wywoływanie procedur z opcjonalnymi parametrami

Gdy wywołujesz procedurę z opcjonalnym parametrem, możesz wybrać, czy podać argument. Jeśli tego nie zrobisz, procedura użyje wartości domyślnej zadeklarowanej dla tego parametru.

Jeżeli pomijasz jeden lub więcej argumentów opcjonalnych na liście argumentów, użyj kolejnych średników do oznaczania ich położenia. Następujący przykład wywołania dostarcza pierwszy i czwarty argument, a pomija drugi i trzeci:

Sub name(argument 1, , , argument 4)  

Poniższy przykład wykonuje kilka wywołań MsgBox funkcji. MsgBox ma jeden wymagany parametr i dwa parametry opcjonalne.

Pierwsze wywołanie do MsgBox dostarcza wszystkie trzy argumenty w kolejności, która MsgBox je definiuje. Drugie wywołanie dostarcza tylko wymagany argument. Wywołania trzecie i czwarte dostarczają argumenty pierwszy i trzeci. Trzecie wywołanie robi to według pozycji, a czwarte wywołanie — według nazwy.

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

Określenie, czy opcjonalny argument jest obecny

Procedura nie może wykryć w czasie wykonywania, czy podany argument został pominięty lub kod wywołujący ma jawnie przekazywaną wartość domyślną. Jeśli potrzebujesz takiego rozróżnienia, możesz ustawić mało prawdopodobną wartość jako domyślną. Poniższa procedura definiuje opcjonalny parametr office, i testuje jego wartość domyślną, , aby sprawdzić, QJZczy został pominięty w wywołaniu:

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

Jeśli opcjonalny parametr jest typem odwołania, takim jak String, można użyć Nothing jako wartości domyślnej, pod warunkiem, że nie jest to oczekiwana wartość argumentu.

Parametry opcjonalne i przeciążenie

Innym sposobem zdefiniowania procedury z opcjonalnymi parametrami jest używanie przeciążenia. Jeśli masz jeden parametr opcjonalny, możesz zdefiniować dwie przeciążone wersje procedury, jedną przyjmującą parametr i jedną bez niego. Takie podejście staje się bardziej skomplikowane w miarę wzrostu liczby parametrów opcjonalnych. Jej zaletą jest jednak, że możesz mieć absolutną pewność, czy program wywołujący dostarcza każdy opcjonalny argument.

Zobacz też