Dans Visual Basic (à la fois Classic et .NET), il est possible de déclarer des paramètres facultatifs pour les procédures et les fonctions en utilisant le mot-clé Optional. Il est également possible de spécifier des valeurs par défaut pour ces paramètres.
Syntaxe :
Sub SendMessage(message As String, Optional urgent As Boolean = False) If urgent Then Console.WriteLine("URGENT: " & message) Else Console.WriteLine(message) End If End Sub ' Appels : SendMessage("Bonjour!") ' urgent = False SendMessage("Message important!", True)
Points importants :
- Les paramètres
Optionaldoivent toujours être les derniers dans la liste des paramètres.- Si la valeur par défaut d'un paramètre est absente, elle est définie sur
Nothingou sur la valeur par défaut du type (par exemple, 0 pour Integer).- Dans le VB classique, les types de paramètres Optionnels sont limités : il est impossible d'utiliser des types sans valeur par défaut (par exemple, des classes non nullables).
Question : Est-il possible dans Visual Basic de déclarer un paramètre obligatoire après un paramètre facultatif (Optional) ? Expliquez pourquoi (non/oui) et comment éviter cela.
Réponse : Non, après la déclaration d'au moins un paramètre comme Optional, tous les paramètres suivants doivent également être déclarés comme Optional. C'est une exigence syntaxique pour éviter toute confusion lors de la transmission des paramètres par position.
Exemple de code erroné :
Sub PrintReport(Optional pageSize As String = "A4", copies As Integer) ' Erreur de compilation : les paramètres obligatoires ne peuvent pas venir après un optional End Sub
Pour résoudre cela, il suffit de changer l'ordre des paramètres :
Sub PrintReport(copies As Integer, Optional pageSize As String = "A4") ' Variante correcte End Sub
Histoire
Dans un grand projet, le client a ajouté un paramètre facultatif à une procédure de partage de fichiers, oubliant sa valeur par défaut requise. Par la suite, lors de l'appel de la méthode sans spécifier le paramètre,
Nothingétait traité comme le nom du fichier, ce qui a provoqué une erreur de téléchargement.
Histoire
À la suite de la copie de la signature de la méthode depuis un autre système, l'ordre des paramètres a été perturbé — le paramètre obligatoire a été déplacé après
Optional. Le programmeur a corrigé l'erreur de compilation en n'ajustant que l'ordre, mais n'a pas pris en compte que tous les appels avaient désormais un décalage de numérotation, entraînant un dysfonctionnement de la fonction dans plus de 30 endroits dans le code.
Histoire
Afin de réduire le volume de code, il a été décidé d'attribuer une chaîne vide comme valeur par défaut pour un paramètre de chaîne. Cependant, dans certains cas, le traitement d'une valeur vide différait de celui d'un paramètre manquant, ce qui entraînait une logique de fonctionnement illogique du dialogue — au lieu d'afficher le texte standard, le formulaire était masqué sans explications.