• Home page
  • Knowlwedge Base
  • Parametri facoltativi di una sub o una funzione

Dettaglio Knowledge Base

Parametri facoltativi di una sub o una funzione

È possibile specificare che un parametro di routine è facoltativo e non è necessario fornire alcun argomento quando la routine viene chiamata. I parametri facoltativi sono indicate dal Optional parola chiave nella definizione della procedura. È necessario attenersi alle regole che seguono:

  • È 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 MsgBoxche 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 procedura seguente definisce il parametro facoltativo office e ne verifica il valore predefinito, QJZ, per vedere 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.