Nie ma żadnych super jasnych powodów, dla których warto używać tego typu składni.
Ogólnie staraj się unikać argumentów logicznych, które z daleka mogą wyglądać na arbitralne. includeManagement
(najprawdopodobniej) znacznie wpłynie na wynik. Ale argument wygląda na to, że ma „małą wagę”.
Wykorzystanie wyliczenia zostało omówione, nie tylko będzie wyglądało, że argument „ma większy ciężar”, ale zapewni także skalowalność metody. Może to jednak nie być najlepsze rozwiązanie we wszystkich przypadkach, ponieważ twoja ReturnEmployeeIds
metoda będzie musiała skalować się wraz z WhatToInclude
-enum (patrz odpowiedź NiklasJ ). Może to powodować ból głowy później.
Zastanów się: jeśli WhatToInclude
skalujesz -enum, ale nie -metod ReturnEmployeeIds
. Może wtedy wyrzucić ArgumentOutOfRangeException
(najlepszy przypadek) lub zwrócić coś całkowicie niechcianego ( null
lub pustego List<Guid>
). Co w niektórych przypadkach może mylić programistę, szczególnie jeśli ReturnEmployeeIds
znajdujesz się w bibliotece klas, w której kod źródłowy nie jest łatwo dostępny.
Można założyć, że WhatToInclude.Trainees
zadziała, jeśli WhatToInclude.All
tak, ponieważ stażyści są „podzbiorem” wszystkich.
Zależy to (oczywiście) od sposobu ReturnEmployeeIds
implementacji.
W przypadkach, w których można przekazać argument boolowski, staram się zamiast tego podzielić go na dwie metody (lub więcej, jeśli to konieczne), w twoim przypadku; można by wyodrębnić ReturnAllEmployeeIds
, ReturnManagementIds
a ReturnRegularEmployeeIds
. Obejmuje to wszystkie podstawy i jest całkowicie zrozumiałe dla każdego, kto je wdraża. Nie będzie to również miało wspomnianego wyżej problemu „skalowania”.
Ponieważ są tylko dwa wyniki dla czegoś, co ma logiczny argument. Wdrożenie dwóch metod wymaga bardzo niewiele dodatkowego wysiłku.
Mniej kodu, rzadko lepiej.
Z tym powiedział, nie są pewne przypadki, w których wyraźnie deklarując argument poprawia czytelność. Zastanów się na przykład. GetLatestNews(max: 10)
. GetLatestNews(10)
jest wciąż dość oczywiste, wyraźna deklaracja max
pomoże wyjaśnić wszelkie nieporozumienia.
A jeśli absolutnie musisz mieć argument boolowski, którego użycia nie można wywnioskować po prostu czytając true
lub false
. Powiedziałbym wtedy, że:
var ids = ReturnEmployeeIds(includeManagement: true);
.. jest absolutnie lepszy i bardziej czytelny niż:
var ids = ReturnEmployeeIds(true);
Ponieważ w drugim przykładzie true
może to oznaczać absolutnie wszystko . Ale starałbym się uniknąć tego argumentu.
boolean
argumentów metod i jak?