Es gibt keine eindeutigen Gründe, warum diese Art von Syntax überhaupt verwendet werden sollte.
Versuchen Sie im Allgemeinen, boolesche Argumente zu vermeiden, die in einiger Entfernung willkürlich aussehen können. includeManagement
wird (höchstwahrscheinlich) das Ergebnis stark beeinflussen. Aber das Argument scheint "wenig Gewicht" zu haben.
Die Verwendung einer Aufzählung wurde diskutiert. Sie sieht nicht nur so aus, als würde das Argument "mehr Gewicht haben", sondern bietet auch Skalierbarkeit für die Methode. Dies ist jedoch möglicherweise nicht in allen Fällen die beste Lösung, da Ihre Methode ReturnEmployeeIds
neben dem WhatToInclude
-enum skaliert werden muss (siehe NiklasJ Antwort von ). Dies kann später zu Kopfschmerzen führen.
WhatToInclude
Beachten Sie Folgendes : Wenn Sie das -enum skalieren, aber nicht die ReturnEmployeeIds
-methode. Es könnte dann einen ArgumentOutOfRangeException
(besten Fall) werfen oder etwas völlig Unerwünschtes ( null
oder ein leeres List<Guid>
) zurückgeben. Was in einigen Fällen den Programmierer verwirren könnte, besonders wenn SieReturnEmployeeIds
sich in einer Klassenbibliothek befinden, in der der Quellcode nicht sofort verfügbar ist.
Man wird davon ausgehen, dass WhatToInclude.Trainees
das funktionieren wird, wennWhatToInclude.All
sieht, dass die Auszubildenden eine "Teilmenge" von allen sind.
Dies hängt (natürlich) davon ab, wie ReturnEmployeeIds
es implementiert ist.
In Fällen, in denen ein boolesches Argument übergeben werden könnte, versuche ich, es in Ihrem Fall stattdessen in zwei Methoden (oder mehr, falls erforderlich) aufzuteilen. man könnte extrahieren ReturnAllEmployeeIds
, ReturnManagementIds
und ReturnRegularEmployeeIds
. Dies deckt alle Grundlagen ab und ist für jeden, der es umsetzt, absolut selbsterklärend. Dies hat auch nicht die oben erwähnte "Skalierung" -Problematik.
Da gibt es immer nur zwei Ergebnisse für etwas, das ein boolesches Argument hat. Das Implementieren von zwei Methoden erfordert nur sehr wenig zusätzlichen Aufwand.
Weniger Code ist selten besser.
Mit diesem wird gesagt, es gibt einige Fälle , in denen ausdrücklich das Argument Lesbarkeit verbessert erklärt. Betrachten Sie zum Beispiel. GetLatestNews(max: 10)
. GetLatestNews(10)
ist immer noch ziemlich selbsterklärend, die explizite Erklärung von max
wird helfen, alle aufzuklären Verwirrung.
Und wenn Sie unbedingt ein boolesches Argument haben müssen, kann die Verwendung nicht durch einfaches Lesen von true
oder abgeleitet werden false
. Dann würde ich sagen:
var ids = ReturnEmployeeIds(includeManagement: true);
.. ist absolut besser und lesbarer als:
var ids = ReturnEmployeeIds(true);
Da im zweiten Beispiel das true
absolut alles bedeuten könnte . Aber ich würde versuchen, dieses Argument zu vermeiden.
boolean
Methodenargumente verwenden und wie?