Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.

  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

4. Functions and Arguments > Default Arguments

Default Arguments

In some languages, such as Ruby, it is possible to assign default values to arguments. This means that if you do not pass in some arguments, for whatever reason, then reasonable default values can be used in their place.

Let’s revisit our calculator example again. We’ll write it so that the tax rate is set to a default value should one not be passed in:

Example: (source: default_args.coffee)


calculateTotal = (sub_total, rate = 0.05) ->
  tax = sub_total * rate
  sub_total + tax

console.log calculateTotal 100, 0.0625
console.log calculateTotal 100


Example: (source: default_args.js)


(function() {
  var calculateTotal;

  calculateTotal = function(sub_total, rate) {
    var tax;
    if (rate == null) rate = 0.05;
    tax = sub_total * rate;
    return sub_total + tax;
  };

  console.log(calculateTotal(100, 0.0625));

  console.log(calculateTotal(100));

}).call(this);


Output: (source: default_args.coffee)


106.25
105


When defining our function, we told CoffeeScript to set the default value of the tax_rate argument equal to 0.05. When we first call the calculateTotal function, we pass in a tax_rate argument of 0.0625; the second time we omit the tax_rate argument altogether, and the code does the appropriate thing and uses 0.05 in its place.

We can take default arguments a step further and have them refer to other arguments. Consider this example:

Example: (source: default_args_referring.coffee)


href = (text, url = text) ->
  html = "<a href='#{url}'>#{text}</a>"
  return html

console.log href("Click Here", "http://www.example.com")
console.log href("http://www.example.com")


Example: (source: default_args_referring.js)


(function() {
  var href;

  href = function(text, url) {
    var html;
    if (url == null) url = text;
    html = "<a'" + url + "'>" + text + "</a>";
    return html;
  };
  console.log(href("Click Here", "http://www.example.com"));

  console.log(href("http://www.example.com"));

}).call(this);


Output: (source: default_args_referring.coffee)


<a href='http://www.example.com'>Click Here</a>
<a href='http://www.example.com'>http://www.example.com</a>


Should no one pass in the url argument in our example, we will set it equal to the text argument that was passed in.

It is also possible to use functions as default values in the argument list. Because the default value will be called only if there is no argument passed in, there is no performance concern.

Example: (source: default_args_with_function.coffee)


defaultRate = -> 0.05

calculateTotal = (sub_total, rate = defaultRate()) ->
  tax = sub_total * rate
  sub_total + tax

console.log calculateTotal 100, 0.0625
console.log calculateTotal 100


Example: (source: default_args_with_function.js)


(function() {
  var calculateTotal, defaultRate;

  defaultRate = function() {
    return 0.05;
  };

  calculateTotal = function(sub_total, rate) {
    var tax;
    if (rate == null) rate = defaultRate();
    tax = sub_total * rate;
    return sub_total + tax;
  };
  console.log(calculateTotal(100, 0.0625));

  console.log(calculateTotal(100));

}).call(this);


Output: (source: default_args_with_function.coffee)


106.25
105



Tip

When using default arguments it is important to note that they must be at the end of the argument list. It is okay to have multiple arguments with defaults, but they all must be at the end.


  • Safari Books Online
  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint