Cómo: Determinar si se ha suministrado un parámetro opcional (Visual Basic)

Cuando un procedimiento define un parámetro opcional, es posible que sea necesario determinar si el código de llamada ha proporcionado el argumento correspondiente o lo ha omitido.

Si el valor del parámetro es igual a su valor predeterminado, esto podría deberse a uno de los motivos siguientes:

  • El código de llamada omitió el argumento en la llamada al procedimiento; o

  • El código de llamada proporcionó un argumento con un valor que es exactamente igual al valor predeterminado del parámetro.

El código del procedimiento no puede distinguir entre estas dos posibilidades. A menudo esto no es importante, pero en ciertos casos el procedimiento podría tener que tomar medidas distintas en cada una de estas situaciones. El mejor enfoque del que dispone es definir un valor improbable como valor predeterminado, aunque esto no garantiza que el código de llamada no pueda suministrarlo.

Es importante estar completamente seguro de que el programa que realiza la llamada proporciona un argumento opcional; el enfoque más seguro es definir versiones sobrecargadas del procedimiento. Vea Cómo: Definir varias versiones de un procedimiento (Visual Basic) y Consideraciones sobre la sobrecarga de procedimientos (Visual Basic).

Para determinar si un argumento se ha transferido a un parámetro opcional

  1. Defina un valor que sea sumamente improbable como valor predeterminado para el parámetro.

  2. Si el argumento opcional es un tipo de referencia, como String, puede utilizar Nothing como valor predeterminado, siempre y cuando éste no sea un valor esperado para el argumento.

  3. En el código del procedimiento, compare el parámetro frente el valor predeterminado y tome las medidas adecuadas.

Sobrecargar un procedimiento con y sin un parámetro opcional

Otra forma de definir un procedimiento con parámetros opcionales consiste en utilizar una sobrecarga. Si tiene un parámetro opcional, puede definir dos versiones sobrecargadas del procedimiento, una que acepte el parámetro y otra que no lo acepte. Este planteamiento se complica a medida que aumenta el número de parámetros opcionales. No obstante, tiene la ventaja de que permite saber con total certeza si el programa de llamada ha suministrado o no cada argumento opcional.

Para definir versiones diferentes del procedimiento en las que se incluya y se omita un argumento

  1. Defina una versión del procedimiento con el parámetro en la lista de argumentos. No declare el parámetro como Optional.

  2. Defina otra versión del procedimiento sin el parámetro. La declaración debería ser idéntica a la de la primera versión en todos los demás aspectos.

  3. Sitúe el código apropiado para cada llamada en la versión correspondiente del procedimiento.

Ejemplo

El procedimiento que se muestra a continuación define el argumento opcional office y comprueba si su valor predeterminado, QJZ, se ha omitido en la llamada:

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

Si el código de llamada no proporciona un valor para office en la lista de argumentos, Visual Basic proporciona el valor predeterminado "QJZ".

Si el argumento opcional es un tipo de referencia, como String, puede utilizar Nothing (Visual Basic) como valor predeterminado, siempre y cuando éste no sea un valor esperado para el argumento.

Para consultar un ejemplo sobre cómo se utilizan las sobrecargas para determinar si se ha transferido un parámetro opcional, vea Cómo: Sobrecargar un procedimiento que toma parámetros opcionales (Visual Basic).

Vea también

Tareas

Cómo: Definir parámetros opcionales para un procedimiento (Visual Basic)

Cómo: Llamar a un procedimiento que utiliza parámetros opcionales (Visual Basic)

Referencia

Optional (Visual Basic)

ParamArray (Visual Basic)

Conceptos

Argumentos y parámetros de procedimiento (Visual Basic)

Pasar argumentos por valor y por referencia (Visual Basic)

Pasar argumentos por posición o por nombre (Visual Basic)

Parámetros opcionales (Visual Basic)

Matrices de parámetros (Visual Basic)

Sobrecarga de procedimiento (Visual Basic)