Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

When I have a function that might, or might not receive a certain parameter, is it better to overload the function, or to add optional args?

If each one has it's ups and downs - when would I use each?

share|improve this question
From the optimization perspective having optional parameters is a better option. – Maneet Puri Jun 14 '12 at 10:58
up vote 10 down vote accepted

If the language supports them properly (e.g. type-safety, if applicable), I would prefer optional arguments for the following reasons:

  • They convey your intent better so noone suspects that your function overload will do something different (which it probably shouldn't anyway).
  • Less code to maintain, even if the function overload only delegates to the more comprehensive one. If you want to rename the function later, you have at least 3 places to do it (two definitions + one call).
  • The compiler (if any) might generate smaller binaries.
  • Optional arguments scale better, at least in some languages. What if you want to have 3 optional arguments with the ability to mix and match? For full flexibility, you'd need 6 overloads to do that.
  • If it's an object method, multiple overloads will greatly hinder the implementation of overrides in subclasses.
share|improve this answer

Assuming a constructor kind of situation: I often choose a fluent builder pattern to prevent situations with many options.

Eg.Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2)) is an example of calling a fluent builder interface implemented in Guava.

Of course you now need a separate object to hold the state of your builder, but you reduce overall complexity by separating behavior of constructing from behavior of the constructed.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.