Parâmetros opcionais (Visual Basic)

Você pode especificar que um parâmetro de procedimento é opcional e nenhum argumento precisa ser fornecido para ele quando o procedimento é chamado. Parâmetros opcionais são indicados pela palavra-chave Optional na definição do procedimento. As seguintes regras se aplicam:

  • Cada parâmetro opcional na definição do procedimento deve especificar um valor padrão.

  • O valor padrão para um parâmetro opcional deve ser uma expressão constante.

  • Todo parâmetro após um parâmetro opcional na definição do procedimento também deve ser opcional.

A sintaxe a seguir mostra uma declaração de procedimento com um parâmetro opcional:

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

Chamando procedimentos com parâmetros opcionais

Ao chamar um procedimento com um parâmetro opcional, você pode escolher se deseja fornecer o argumento. Caso contrário, o procedimento usa o valor padrão declarado para esse parâmetro.

Ao omitir um ou mais argumentos opcionais no lista de argumentos, você use sucessivas vírgulas para marcar as posições. A chamada de exemplo a seguir fornece o primeiro e o quarto argumentos, mas não o segundo ou terceiro:

Sub name(argument 1, , , argument 4)  

O exemplo a seguir faz várias chamadas para a função MsgBox. MsgBox tem um parâmetro obrigatório e dois parâmetros opcionais.

A primeira chamada para MsgBox fornece todos os três argumentos na ordem que MsgBox os define. A segunda chamada fornece apenas o argumento necessário. A terceira e a quarta chamadas fornecem o primeiro e o terceiro argumentos. A terceira chamada faz isso por posição, e a quarta chamada faz isso por nome.

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")

Determinando se um argumento opcional está presente

Um procedimento não pode detectar no tempo de execução se um determinado argumento foi omitido ou o código de chamada forneceu explicitamente o valor padrão. Se você precisar fazer essa distinção, defina um valor improvável como o padrão. O procedimento a seguir define o parâmetro opcional office e testa seu valor padrão, QJZ, para ver se ele foi omitido na chamada:

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

Se o parâmetro opcional for um tipo de referência como String, você poderá usar Nothing como valor padrão, desde que não seja um valor esperado para o argumento.

Parâmetros opcionais e sobrecarga

Outra maneira de definir um procedimento com parâmetros opcionais é usar a sobrecarga. Se você tiver um parâmetro opcional, poderá definir duas versões sobrecarregadas do procedimento, uma aceitando o parâmetro e outra sem ele. Essa abordagem torna-se mais complicada à medida que o número de parâmetros opcionais aumenta. No entanto, sua vantagem é que você pode ter certeza absoluta se o programa de chamada forneceu cada argumento opcional.

Confira também