Passage des arguments par position et par nom (Visual Basic)

Lorsque vous appelez une procédure Sub ou Function, vous pouvez passer des arguments par position dans l’ordre dans lequel elles apparaissent dans la définition de la procédure ou vous pouvez les transmettre par nom, sans tenir compte de la position.

Lorsque vous passez un argument par nom, vous spécifiez le nom déclaré de l’argument suivi de deux-points et d’un signe égal (:=), puis suivi de la valeur de l’argument. Vous pouvez indiquer des arguments nommés dans n’importe quel ordre.

Par exemple, la procédure suivante Sub prend trois arguments :

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

Lorsque vous appelez cette procédure, vous pouvez indiquer les arguments par position, par nom ou à l’aide d’un mélange des deux.

Passage d’arguments par position

Vous pouvez appeler la méthode Display avec ses arguments transmis par position et délimités par des virgules, comme illustré dans l’exemple suivant :

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

Si vous omettez un argument facultatif dans une liste d’arguments positionnels, vous devez conserver sa place avec une virgule. L’exemple suivant appelle la méthode Display sans l’argument age :

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

Passage d’arguments par nom

Vous pouvez également appeler Display avec les arguments transmis par nom, également délimités par des virgules, comme illustré dans l’exemple suivant :

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

Le passage d’arguments par nom de cette manière est particulièrement utile lorsque vous appelez une procédure comportant plusieurs arguments facultatifs. Si vous indiquez des arguments par nom, vous n’avez pas besoin d’utiliser de virgules consécutives pour désigner les arguments positionnels manquants. Le passage d’arguments par nom facilite également le suivi des arguments que vous passez et ceux que vous omettez.

Mélange d’arguments par position et par nom

Vous pouvez indiquer des arguments par position et par nom dans un appel de procédure unique, comme illustré dans l’exemple suivant :

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

Dans l’exemple précédent, aucune virgule supplémentaire n’est nécessaire pour contenir l’emplacement de l’argument omis age, puisque birth est passé par nom.

Dans les versions de Visual Basic antérieures à la version 15.5, lorsque vous indiquez des arguments par un mélange de positions et de noms, les arguments positionnels doivent tous passer en premier. Une fois que vous avez indiqué un argument par nom, l’ensemble des arguments restants doivent être passés par nom. Par exemple, l’appel suivant à la méthode Display affiche l’erreur du compilateur BC30241 : argument nommé attendu.

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

À partir de la version 15.5 de Visual Basic, les arguments positionnels peuvent suivre des arguments nommés si les arguments positionnels de fin sont à la bonne position. S’il est compilé sous la version 15.5 de Visual Basic, l’appel précédent à la méthode Display se compile correctement et ne génère plus l’erreur du compilateur BC30241.

Cette possibilité de mélanger et de faire correspondre des arguments nommés et positionnels dans n’importe quel ordre est particulièrement utile lorsque vous souhaitez utiliser un argument nommé pour rendre votre code plus lisible. Par exemple, le constructeur de classe suivant Person nécessite deux arguments de type Person, qui peuvent tous deux être Nothing.

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

L’utilisation du mélange d’arguments nommés et positionnels permet de rendre l’intention du code précise lorsque la valeur des father et des arguments mother est Nothing :

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

Pour suivre les arguments positionnels avec des arguments nommés, vous devez ajouter l’élément suivant à votre fichier de projet Visual Basic (*.vbproj) :

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

Pour plus d’informations, consultez Définir la version du langage Visual Basic.

Restrictions relatives à la fourniture d’arguments par nom

Vous ne pouvez pas passer des arguments par nom pour éviter d’entrer les arguments requis. Vous pouvez uniquement omettre les arguments facultatifs.

Vous ne pouvez pas passer un tableau de paramètres par nom. Cela est dû au fait que lorsque vous appelez la procédure, vous indiquez un nombre indéfini d’arguments séparés par des virgules pour le tableau de paramètres, et le compilateur ne peut pas associer plusieurs arguments à un seul nom.

Voir aussi