Non ci sono ragioni per super clear come il motivo per cui utilizzare questo tipo di sintassi, in primo luogo.
In generale, cerca di evitare di avere argomenti booleani che a una distanza possono sembrare arbitrari. includeManagement
(molto probabilmente) influenzerà notevolmente il risultato. Ma l'argomento sembra avere "poco peso".
L'uso di un enum è stato discusso, non solo assomiglierà all'argomento "porta più peso", ma fornirà anche la scalabilità al metodo. Questa potrebbe tuttavia non essere la soluzione migliore in tutti i casi, poiché il tuo ReturnEmployeeIds
-method dovrà scalare insieme al WhatToInclude
-enum (vedi Risposta di NiklasJ ). Questo potrebbe darti un mal di testa più tardi.
Considera questo: se ridimensiona il WhatToInclude
-enum, ma non il ReturnEmployeeIds
-method. Potrebbe quindi generare un ArgumentOutOfRangeException
(best case) o restituire qualcosa di completamente indesiderato ( null
o un List<Guid>
vuoto). Che in alcuni casi potrebbe confondere il programmatore, specialmente se il ReturnEmployeeIds
è in una libreria di classi, in cui il codice sorgente non è facilmente disponibile.
Si supporrà che WhatToInclude.Trainees
funzioni se WhatToInclude.All
, visto che i tirocinanti sono un "sottoinsieme" di tutti.
Questo (ovviamente) dipende da come ReturnEmployeeIds
è implementato.
Nei casi in cui un argomento booleano può essere passato, cerco di scomporlo in due modi (o più, se necessario), nel tuo caso; uno potrebbe estrarre ReturnAllEmployeeIds
, ReturnManagementIds
e ReturnRegularEmployeeIds
. Questo copre tutte le basi ed è assolutamente auto-esplicativo per chi lo implementa. Anche questo non avrà il "ridimensionamento" -issue, menzionato sopra.
Dato che ci sono sempre due risultati per qualcosa che ha un argomento booleano. L'implementazione di due metodi richiede pochissimo sforzo in più.
Meno codice, raramente è meglio.
Con questo detto, sono alcuni casi in cui la dichiarazione esplicita dell'argomento migliora la leggibilità. Pensa ad esempio. %codice%. GetLatestNews(max: 10)
è ancora abbastanza auto-esplicativo, la dichiarazione esplicita di GetLatestNews(10)
aiuterà a chiarire qualsiasi confusione.
E se devi assolutamente avere un argomento booleano, quale utilizzo non può essere dedotto leggendo solo max
o true
. Quindi direi che:
var ids = ReturnEmployeeIds(includeManagement: true);
.. è assolutamente migliore e più leggibile di:
var ids = ReturnEmployeeIds(true);
Poiché nel secondo esempio, false
potrebbe significare assolutamente qualsiasi cosa . Ma proverei ad evitare questo argomento.