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. includeManagementwird (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 ReturnEmployeeIdsneben dem WhatToInclude-enum skaliert werden muss (siehe NiklasJ Antwort von ). Dies kann später zu Kopfschmerzen führen.
WhatToIncludeBeachten 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 ( nulloder 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.Traineesdas 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, ReturnManagementIdsund 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 maxwird helfen, alle aufzuklären Verwirrung.
Und wenn Sie unbedingt ein boolesches Argument haben müssen, kann die Verwendung nicht durch einfaches Lesen von trueoder 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 trueabsolut alles bedeuten könnte . Aber ich würde versuchen, dieses Argument zu vermeiden.
booleanMethodenargumente verwenden und wie?