Parâmetros opcionais (Visual Basic)
Você pode especificar que um parâmetro procedure é opcional e nenhum argumento precisa ser fornecido para ele quando o procedimento é chamado. Os parâmetros opcionais são indicados pela Optional
palavra-chave na definição do procedimento. Aplicam-se as seguintes regras:
Cada parâmetro opcional na definição de procedimento deve especificar um valor padrão.
O valor padrão para um parâmetro opcional deve ser uma expressão constante.
Todos os parâmetros que seguem um parâmetro opcional na definição do procedimento também devem ser opcionais.
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)
Procedimentos de chamada 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 usará o valor padrão declarado para esse parâmetro.
Ao omitir um ou mais argumentos opcionais na lista de argumentos, você usa vírgulas sucessivas para marcar suas posições. A chamada de exemplo a seguir fornece o primeiro e o quarto argumentos, mas não o segundo ou o terceiro:
Sub name(argument 1, , , argument 4)
O exemplo a seguir faz várias chamadas para a MsgBox
função. MsgBox
tem um parâmetro necessário e dois parâmetros opcionais.
A primeira chamada para MsgBox
fornece os três argumentos na ordem que MsgBox
os define. A segunda chamada fornece apenas o argumento necessário. O terceiro e quarto convites fornecem o primeiro e o terceiro argumentos. A terceira chamada faz isso por posição, e a quarta chamada faz isso pelo 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 detetar em tempo de execução se um determinado argumento foi omitido ou se o código de chamada forneceu explicitamente o valor padrão. Se você precisar fazer essa distinção, poderá definir um valor improvável como padrão. O procedimento a seguir define o parâmetro office
opcional 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 um String
, você poderá usar Nothing
como o valor padrão, desde que esse 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 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. Esta 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.