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 ReturnEmployeeIdsmetoda 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 WhatToIncludeskalujesz -enum, ale nie -metod ReturnEmployeeIds. Może wtedy wyrzucić ArgumentOutOfRangeException(najlepszy przypadek) lub zwrócić coś całkowicie niechcianego ( nulllub pustego List<Guid>). Co w niektórych przypadkach może mylić programistę, szczególnie jeśli ReturnEmployeeIdsznajdujesz się w bibliotece klas, w której kod źródłowy nie jest łatwo dostępny.
Można założyć, że WhatToInclude.Traineeszadziała, jeśli WhatToInclude.Alltak, 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, ReturnManagementIdsa 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 maxpomoż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 truelub 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 truemoże to oznaczać absolutnie wszystko . Ale starałbym się uniknąć tego argumentu.
booleanargumentów metod i jak?