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.