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

Al llamar a un procedimiento Sub o Function, puede pasar argumentos por posición (en el orden en que aparecen en la definición del procedimiento) o puede pasarlos por nombre, sin tener en cuenta la posición.

Cuando se pasa un argumento por nombre, se especifica el nombre declarado del argumento seguido de dos puntos y un signo igual (:=), seguido del valor del argumento. Puedes proporcionar argumentos con nombre en cualquier orden.

Por ejemplo, el Sub siguiente procedimiento toma tres argumentos:

Public Class StudentInfo
    Shared Sub Display(name As String,
                Optional age As Short = 0,
                Optional birth As Date = #1/1/2000#)

        Console.WriteLine($"Name = {name}; age = {age}; birth date = {birth:d}")
    End Sub
End Class

Al llamar a este procedimiento, puedes proporcionar los argumentos por posición, por nombre o mediante una combinación de ambos.

Pasar argumentos por posición o por nombre

Puedes llamar al Display método con sus argumentos pasados por posición y delimitados por comas, como se muestra en el ejemplo siguiente:

StudentInfo.Display("Mary", 19, #9/21/1998#)

Si omites un argumento opcional en una lista de argumentos posicionales, debes mantener su lugar con una coma. En el ejemplo siguiente se llama al Display método sin el age argumento :

StudentInfo.Display("Mary",, #9/21/1998#)

Pasar argumentos por nombre

Como alternativa, puedes llamar a Display con los argumentos pasados por nombre, también delimitados por comas, como se muestra en el ejemplo siguiente:

StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")

Pasar argumentos por nombre de esta manera es especialmente útil cuando se llama a un procedimiento que tiene más de un argumento opcional. Si proporcionas argumentos por nombre, no tiene que usar comas consecutivas para indicar los argumentos posicionales que faltan. Pasar argumentos por nombre también facilita el seguimiento de los argumentos que se pasan y cuáles se omiten.

Pasar argumentos por posición o por nombre

Puedes proporcionar argumentos por posición y por nombre en una sola llamada a procedimiento, como se muestra en el ejemplo siguiente:

StudentInfo.Display("Mary", birth:=#9/21/1998#)

En el ejemplo anterior, no es necesaria ninguna coma adicional para contener el lugar del argumento omitido age, ya que birth se pasa por nombre.

En las versiones de Visual Basic anteriores a la versión 15.5, al proporcionar argumentos por una combinación de posición y nombre, los argumentos posicionales deben aparecer primero. Una vez que proporcione un argumento por nombre, todos los argumentos restantes deben pasarse por nombre. Por ejemplo, la siguiente llamada al método muestra el Display error del compilador BC30241: Se esperaba un argumento con nombre.

StudentInfo.Display("Mary", age:=19, #9/21/1998#)

A partir de Visual Basic 15.5, los argumentos posicionales pueden seguir argumentos con nombre si los argumentos posicionales finales están en la posición correcta. Si se compila en Visual Basic 15.5, la llamada anterior al Display método se compila correctamente y ya no genera el error del compilador BC30241.

Esta capacidad para combinar y buscar coincidencias con argumentos con nombre y posición en cualquier orden es especialmente útil cuando se desea usar un argumento con nombre para que el código sea más legible. Por ejemplo, el constructor de clase siguiente Person requiere dos argumentos de tipo Person, ambos de los cuales pueden ser Nothing.

Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)

El uso de argumentos con nombre mixto y posicional ayuda a que la intención del código sea clara cuando el valor de los father argumentos y mother es Nothing:

Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)

Para seguir argumentos posicionales con argumentos con nombre, debes agregar el siguiente elemento al archivo de proyecto de Visual Basic (*.vbproj):

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

Para obtener más información, consulta la configuración de la versión de lenguaje de Visual Basic.

Restricciones en el suministro de argumentos por nombre

No se pueden pasar argumentos por nombre para evitar escribir argumentos necesarios. Solo puedes omitir los argumentos opcionales.

No se puede pasar una matriz de parámetros por nombre. Esto es así porque cuando se llama al procedimiento, se proporciona un número indefinido de argumentos separados por comas para la matriz de parámetros y el compilador no puede asociar más de un argumento con un nombre único.

Consulte también