Parametri facoltativi (Visual Basic)
È possibile specificare che un parametro di routine è facoltativo e non è necessario fornire alcun argomento quando la routine viene chiamata. I parametri facoltativi sono indicati dalla parola chiave Optional
nella definizione della routine. Si applicano le seguenti regole:
È necessario che ciascun parametro facoltativo nella definizione della routine specifichi un valore predefinito.
È necessario che tale valore predefinito per un parametro facoltativo sia un'espressione costante.
Ciascun parametro che segue un parametro facoltativo nella definizione della routine deve essere anch'esso facoltativo.
Nella sintassi seguente viene illustrata una dichiarazione di routine con un parametro facoltativo:
Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)
Chiamata di routine con parametri facoltativi
Quando si chiama una routine con un parametro facoltativo, è possibile scegliere se fornire l'argomento o meno. Se non lo si fornisce, la routine utilizza il valore predefinito dichiarato per quel parametro.
Quando si omettono uno o più argomenti facoltativi nell'elenco degli argomenti, utilizzare virgole in sequenza per contrassegnarne la posizione. La chiamata di esempio che segue fornisce il primo e il quarto argomento, ma non il secondo o il terzo:
Sub name(argument 1, , , argument 4)
Nell'esempio riportato di seguito vengono effettuate diverse chiamate alla funzione MsgBox
che include un parametro obbligatorio e due parametri facoltativi.
Nella prima chiamata a MsgBox
vengono forniti tutti e tre gli argomenti nell'ordine in cui sono definiti da MsgBox
. Nella seconda chiamata viene fornito solo l'argomento obbligatorio. Nella terza e quarta chiamata vengono forniti il primo e il terzo argomento. Nella terza chiamata gli argomenti vengono forniti in base alla posizione, nella quarta in base al 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")
Determinazione dell'eventuale presenza di un argomento facoltativo
Una routine non può rilevare, in fase di esecuzione, se un determinato argomento è stato omesso o se il codice di chiamata ha fornito in modo esplicito il valore predefinito. Se è necessario fare questa distinzione, è possibile impostare come predefinito un valore improbabile. La routine riportata di seguito definisce il parametro facoltativo office
e ne verifica il valore predefinito, QJZ
, per controllare se è stato omesso nella chiamata:
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 il parametro facoltativo è un tipo di riferimento come String
, è possibile utilizzare Nothing
come valore predefinito, a meno che esso non sia un valore previsto per l'argomento.
Parametri facoltativi e overload
Un altro modo per definire una routine con parametri facoltativi consiste nell'utilizzare l'overload. Nel caso di un parametro facoltativo, è possibile definire due versioni di overload della routine, una con il parametro e l'altra senza. Questo metodo diventa più complesso con l'aumentare del numero dei parametri facoltativi, tuttavia ha il vantaggio di assicurare che il programma di chiamata fornisca tutti gli argomenti facoltativi.