Il n'y a pas de raisons très claires pour lesquelles utiliser ce type de syntaxe en premier lieu.
En général, essayez d'éviter d'avoir des arguments booléens qui à distance peuvent sembler arbitraires. includeManagement
affectera (très probablement) le résultat. Mais l'argument semble avoir «peu de poids».
L'utilisation d'une énumération a été discutée, non seulement elle ressemblera à l'argument "porte plus de poids", mais elle fournira également une évolutivité à la méthode. Cela pourrait cependant ne pas être la meilleure solution dans tous les cas, car votre ReturnEmployeeIds
méthode devra évoluer parallèlement au WhatToInclude
-enum (voir la réponse de NiklasJ ). Cela pourrait vous donner mal à la tête plus tard.
Considérez ceci: si vous WhatToInclude
modifiez l'échelle -enum, mais pas la ReturnEmployeeIds
méthode -méthode. Il pourrait alors jeter un ArgumentOutOfRangeException
(meilleur cas) ou retourner quelque chose de complètement indésirable ( null
ou un vide List<Guid>
). Ce qui dans certains cas peut dérouter le programmeur, surtout si vous ReturnEmployeeIds
êtes dans une bibliothèque de classes, où le code source n'est pas facilement disponible.
On supposera que WhatToInclude.Trainees
cela fonctionnera si WhatToInclude.All
cela fonctionne, étant donné que les stagiaires sont un "sous-ensemble" de tous.
Cela dépend (bien sûr) de la façon dont il ReturnEmployeeIds
est mis en œuvre.
Dans les cas où un argument booléen pourrait être transmis, j'essaie plutôt de le diviser en deux méthodes (ou plus, si nécessaire), dans votre cas; on pourrait extraire ReturnAllEmployeeIds
, ReturnManagementIds
et ReturnRegularEmployeeIds
. Cela couvre toutes les bases et est absolument explicite à quiconque le met en œuvre. Cela n'aura pas non plus le problème de "mise à l'échelle" mentionné ci-dessus.
Puisqu'il n'y a que deux résultats pour quelque chose qui a un argument booléen. La mise en œuvre de deux méthodes nécessite très peu d'efforts supplémentaires.
Moins de code, c'est rarement mieux.
Cela dit, il existe certains cas où la déclaration explicite de l'argument améliore la lisibilité. Considérez par exemple. GetLatestNews(max: 10)
. GetLatestNews(10)
est encore assez explicite, la déclaration explicite de max
contribuera à dissiper toute confusion.
Et si vous devez absolument avoir un argument booléen, quel usage ne peut pas être déduit en lisant simplement true
ou false
. Alors je dirais que:
var ids = ReturnEmployeeIds(includeManagement: true);
.. est absolument meilleur et plus lisible que:
var ids = ReturnEmployeeIds(true);
Puisque dans le deuxième exemple, le true
pourrait signifier absolument n'importe quoi . Mais j'essaierais d'éviter cet argument.
boolean
arguments de méthode, et comment?