Não há motivos super claros para usar esse tipo de sintaxe em primeiro lugar.
Em geral, tente evitar ter argumentos booleanos que à distância podem parecer arbitrários. includeManagement(provavelmente) afetará bastante o resultado. Mas o argumento parece ter "pouco peso".
O uso de um enum foi discutido, não apenas parecerá que o argumento "carrega mais peso", mas também fornecerá escalabilidade para o método. No entanto, essa pode não ser a melhor solução em todos os casos, já que o seu ReturnEmployeeIdsmétodo-terá que ser escalado ao lado do WhatToInclude-enum (consulte a resposta de NiklasJ ). Isso pode causar dor de cabeça mais tarde.
Considere o seguinte: Se você dimensionar o WhatToIncludemétodo -enum, mas não o ReturnEmployeeIdsmétodo. Pode então lançar um ArgumentOutOfRangeException(melhor caso) ou retornar algo completamente indesejado ( nullou vazio List<Guid>). O que, em alguns casos, pode confundir o programador, especialmente se você ReturnEmployeeIdsestiver em uma biblioteca de classes, onde o código-fonte não está prontamente disponível.
Supõe-se que WhatToInclude.Traineesfuncionará se WhatToInclude.Allfuncionar, visto que os trainees são um "subconjunto" de todos.
Isso depende, é claro, de como ReturnEmployeeIds é implementado.
Nos casos em que um argumento booleano pode ser passado, tento dividi-lo em dois métodos (ou mais, se necessário), no seu caso; pode-se extrair ReturnAllEmployeeIds, ReturnManagementIdse ReturnRegularEmployeeIds. Isso cobre todas as bases e é absolutamente auto-explicativo para quem a implementa. Isso também não terá o item "scaling", mencionado acima.
Como existem apenas dois resultados para algo que possui um argumento booleano. A implementação de dois métodos exige muito pouco esforço extra.
Menos código, raramente é melhor.
Com isto dito, não são alguns casos onde explicitamente declarar o argumento melhora a legibilidade. Considere, por exemplo. GetLatestNews(max: 10). aindaGetLatestNews(10) é bastante auto-explicativo, a declaração explícita de ajudará a esclarecer qualquer confusão.max
E se você absolutamente deve ter um argumento booleano, qual uso não pode ser inferido apenas lendo trueou false. Então eu diria que:
var ids = ReturnEmployeeIds(includeManagement: true);
.. é absolutamente melhor e mais legível que:
var ids = ReturnEmployeeIds(true);
Como no segundo exemplo, isso truepode significar absolutamente qualquer coisa . Mas eu tentaria evitar esse argumento.
booleanargumentos de método e como?