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

  1. Definire un valore estremamente improbabile come valore predefinito per il parametro.

  2. 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.

  3. 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

  1. Definire una versione della routine con il parametro nell'elenco di argomenti. Non dichiarare il parametro come Optional.

  2. 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.

  3. 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

Parametri facoltativi

Matrici di parametri

Overload della routine

Riferimenti

Optional (Visual Basic)

ParamArray