Procedura: determinare se un parametro facoltativo è stato fornito
Aggiornamento: novembre 2007
Quando una routine definisce un parametro facoltativo, potrebbe essere necessario determinare se il codice chiamante ha fornito oppure omesso l'argomento corrispondente.
La corrispondenza tra il valore del parametro e il valore predefinito potrebbe dipendere da uno dei due possibili motivi indicati di seguito.
Il codice chiamante ha omesso l'argomento nella chiamata di routine.
Il codice chiamante ha fornito l'argomento che presenta un valore uguale al valore predefinito del parametro.
Il codice di routine non è in grado di distinguere tra le due possibilità. La mancata differenziazione è spesso ininfluente, ma in alcuni casi può comportare l'esecuzione di azioni differenti. Il miglior metodo disponibile consiste nel definire come valore predefinito un valore improbabile, sebbene sia comunque possibile che il codice chiamante riesca a fornirlo.
Se al contrario è importante sapere con certezza assoluta se il programma chiamante ha fornito un argomento facoltativo, il metodo più sicuro consiste nel definire versioni di overload della routine. Per informazioni, vedere Procedura: definire più versioni di una routine e Considerazioni sull'overload di routine.
Per determinare se un argomento è stato passato a un parametro facoltativo
Definire un valore estremamente improbabile come valore predefinito per il parametro.
Se il parametro facoltativo è un tipo di riferimento come String, sarà possibile utilizzare Nothing come valore predefinito, purché non sia un valore previsto per l'argomento.
Nel codice della routine confrontare il parametro e il valore predefinito e determinare l'azione più appropriata da eseguire.
Esecuzione dell'overload di una routine con o senza un parametro facoltativo
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.
Per definire versioni diverse della routine in modo da gestire sia l'inclusione che l'omissione di un argomento
Definire una versione della routine con il parametro nell'elenco di argomenti. Non dichiarare il parametro come Optional.
Definire un'altra versione della routine senza il parametro ma non apportare altre modifiche in modo che la dichiarazione resti identica a quella della prima versione.
Inserire il codice appropriato in ciascuna chiamata nella rispettiva versione della routine.
Esempio
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 codice chiamante non specifica un valore office nell'elenco di argomenti, in Visual Basic verrà fornito il valore predefinito "QJZ".
Se il parametro facoltativo è un tipo di riferimento come String, sarà possibile utilizzare Nothing (Visual Basic) come valore predefinito, purché non sia un valore previsto per l'argomento.
Per un esempio dell'utilizzo degli overload per determinare se è stato passato un parametro facoltativo, vedere Procedura: overload di una routine che accetta parametri facoltativi.
Vedere anche
Attività
Procedura: definire parametri facoltativi per una routine
Procedura: chiamare una routine che accetta parametri facoltativi
Concetti
Parametri e argomenti delle routine
Passaggio di argomenti per valore e per riferimento
Passaggio di argomenti tramite posizione e tramite nome