Non ci sono ragioni super chiare per cui utilizzare questo tipo di sintassi in primo luogo.
In generale, cerca di evitare di avere argomenti booleani che a distanza possano sembrare arbitrari. includeManagement
(molto probabilmente) influenzerà notevolmente il risultato. Ma l'argomento sembra avere un "piccolo peso".
È stato discusso l'uso di un enum, non solo sembrerà che l'argomento "abbia più peso", ma fornirà anche scalabilità al metodo. Questa potrebbe tuttavia non essere la soluzione migliore in tutti i casi, poiché il tuo ReturnEmployeeIds
metodo dovrà ridimensionarsi insieme al WhatToInclude
-enum (vedi la risposta di NiklasJ ). Questo potrebbe farti venire il mal di testa in seguito.
Considera questo: se ridimensioni l' WhatToInclude
enum, ma non il ReturnEmployeeIds
metodo. Potrebbe quindi lanciare un ArgumentOutOfRangeException
(miglior caso) o restituire qualcosa di completamente indesiderato ( null
o vuoto List<Guid>
). Il che in alcuni casi potrebbe confondere il programmatore, specialmente se sei ReturnEmployeeIds
in una libreria di classi, dove il codice sorgente non è prontamente disponibile.
Si supporrà che WhatToInclude.Trainees
funzionerà se WhatToInclude.All
funziona, visto che i tirocinanti sono un "sottoinsieme" di tutti.
Questo (ovviamente) dipende da come ReturnEmployeeIds
viene implementato.
Nei casi in cui un argomento booleano potrebbe essere passato, provo invece a suddividerlo in due metodi (o più, se necessario), nel tuo caso; si potrebbe estrarre ReturnAllEmployeeIds
, ReturnManagementIds
e ReturnRegularEmployeeIds
. Questo copre tutte le basi ed è assolutamente autoesplicativo per chiunque lo attui. Anche questo non avrà il "ridimensionamento", di cui sopra.
Dal momento che ci sono solo due risultati per qualcosa che ha un argomento booleano. L'implementazione di due metodi richiede pochissimi sforzi extra.
Meno codice, raramente è meglio.
Detto questo, ci sono alcuni casi in cui dichiarare esplicitamente l'argomento migliora la leggibilità. Considera ad esempio. GetLatestNews(max: 10)
. GetLatestNews(10)
è ancora abbastanza autoesplicativo, la dichiarazione esplicita di max
aiuterà a chiarire qualsiasi confusione.
E se devi assolutamente avere un argomento booleano, quale uso non può essere dedotto solo leggendo true
o false
. Quindi direi che:
var ids = ReturnEmployeeIds(includeManagement: true);
.. è assolutamente migliore e più leggibile di:
var ids = ReturnEmployeeIds(true);
Dal momento che nel secondo esempio, true
potrebbe significare assolutamente qualsiasi cosa . Ma proverei a evitare questo argomento.
boolean
argomenti del metodo e come?