Когда у меня есть функция, которая может или не может получить определенный параметр, лучше перегрузить функцию или добавить необязательные аргументы?
Если у каждого есть свои взлеты и падения - когда я буду их использовать?
Когда у меня есть функция, которая может или не может получить определенный параметр, лучше перегрузить функцию или добавить необязательные аргументы?
Если у каждого есть свои взлеты и падения - когда я буду их использовать?
Ответы:
Если язык поддерживает их должным образом (например, безопасность типов, если применимо), я бы предпочел необязательные аргументы по следующим причинам:
a
, b
и c
имеет эти возможности: ничего, а, б, в, ab, ac, bc, abc. Это 2^n
для разных типов, а неn!
Предполагая конструкторскую ситуацию: я часто выбираю беглый шаблон конструктора, чтобы избежать ситуаций с множеством вариантов.
Например. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))
это пример вызова интерфейса свободно созданного, реализованного в Гуаве.
Конечно, теперь вам нужен отдельный объект для хранения состояния вашего компоновщика, но вы уменьшаете общую сложность, отделяя поведение конструирования от поведения конструируемого.