Kiedy mam funkcję, która może otrzymać lub nie otrzymać określonego parametru, czy lepiej jest przeciążyć funkcję lub dodać opcjonalne argumenty?
Jeśli każdy ma swoje wzloty i upadki - kiedy miałbym z nich korzystać?
Kiedy mam funkcję, która może otrzymać lub nie otrzymać określonego parametru, czy lepiej jest przeciążyć funkcję lub dodać opcjonalne argumenty?
Jeśli każdy ma swoje wzloty i upadki - kiedy miałbym z nich korzystać?
Odpowiedzi:
Jeśli język obsługuje je poprawnie (np. Bezpieczeństwo typu, jeśli dotyczy), wolałbym opcjonalne argumenty z następujących powodów:
a
, b
i c
ma następujące możliwości: nic, a, b, c, AB, AC, BC, ABC. To jest 2^n
dla różnych typów, nien!
Zakładając sytuację w rodzaju konstruktora: Często wybieram płynny wzorzec konstruktora, aby zapobiec sytuacjom z wieloma opcjami.
Na przykład. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))
to przykład wywołania płynnego interfejsu konstruktora zaimplementowanego w Guava.
Oczywiście potrzebujesz teraz osobnego obiektu, aby utrzymać stan twojego konstruktora, ale zmniejszasz ogólną złożoność, oddzielając zachowanie konstruowania od zachowania konstruowanego.