Коли у мене є функція, яка може або не може отримати певний параметр, краще перевантажити функцію або додати необов'язкові аргументи?
Якщо у кожного з них є злети і падіння - коли я буду використовувати їх?
Коли у мене є функція, яка може або не може отримати певний параметр, краще перевантажити функцію або додати необов'язкові аргументи?
Якщо у кожного з них є злети і падіння - коли я буду використовувати їх?
Відповіді:
Якщо мова підтримує їх належним чином (наприклад, безпека типу, якщо це застосовується), я віддаю перевагу необов’язкові аргументи з таких причин:
a
, b
і c
має наступні можливості: нічого, а, б, в, AB, AC, BC, ABC. Це 2^n
для різних типів, але неn!
Припускаючи ситуацію в конструкторі: я часто вибираю вільний шаблон конструктора, щоб запобігти ситуаціям з багатьма варіантами.
Напр. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))
є прикладом виклику вільного інтерфейсу для побудови, реалізованого в Guava.
Звичайно, зараз вам потрібен окремий об'єкт для утримання стану вашого будівельника, але ви зменшуєте загальну складність, відокремлюючи поведінку конструкції від поведінки побудованих.