function functionName(__parameterNames) { }

Functions allow structuring and reuse of code. They are defined with the function keyword, and their content is a code block enclosed in curly brackets. Functions can take parameters between brackets (parentheses). The return keyword is used to end the function and return a value.

Parameters and result

Parameters are always passed by value, but note that the value of a collection variable is a reference. Multiple parameters are separated by commas.

The result of a function is defined by the return keyword. It is also possible to end a function without returning anything. This happens when the last line has run, the return statement is empty, or a break; is executed.

Example

use System;
use Web;

var page = Web.loadPage("http://www.google.com/");
System.print(getLang(page));

function getLang(page) {
    return Web.xPath(page, "/html/@lang");
}

Scope

  • Variables declared in the highest scope (outside of functions) are in scope of all functions in the same robot, but not in included functions
  • Variables declared in a function are never in scope outside of that function (although the value can be passed or returned)
  • Parameters with the same name as another variable in scope will mask that variable

Example

use System;

var test1 = 1; // declared in super scope, so this var is available in all functions
function1();

function function1() {
    var test2 = 2; // will be garbage collected when function 1 ends
    var test3 = 3;
    function2(test3); // passes the value of test3
    System.print(test1); // prints 8, because function2 changed it
    System.print(test3); // still prints 3, because this variable was shadowed in function2
}

function function2(test3) { // value '3' is put in new variable also named 'test3'
    test1 = 8; // this changes test1 in robot-wide scope
    // test2 is not in scope
    test3 = 4; /// this changes only the masking variable test3 (in this scope)
    System.print(test3); //prints 4
}

Re-using functions

Functions in a robot can be used in another robot using the include keyword.