Оператор function
Обновлен: Ноябрь 2007
Объявляет новую функцию. Этот оператор может использоваться в нескольких контекстах:
// in the global scope
function functionname([parmlist]) [: type] {
[body]
}
// declares a method in a class
[attributes] [modifiers] function functionname([parmlist]) [: type] {
[body]
}
// declares a method in an interface
[attributes] [modifiers] function functionname([parmlist]) [: type]
Аргументы
attributes
Необязательный. Атрибуты, которые определяют видимость и поведение метода.modifiers
Необязательный. Модификаторы, которые определяют видимость и поведение метода.functionname
Обязательный. Имя функции или метода.paramlist
Необязательный. Разделенный запятыми список параметров функции или метода. Каждый параметр может включать определение типа. Последним параметром может быть массив parameterarray, который указывается в следующей форме: знак многоточия (...), имя параметра и аннотация типа типизированного массива.type
Необязательный. Тип возвращаемых данных метода.body
Необязательный. Один или несколько операторов, определяющих функциональность функции или метода.
Заметки
Оператор function применяется для объявления функции с целью ее дальнейшего использования. Код, содержащийся в разделе body, не выполняется до вызова функции в сценарии. Оператор return используется для возврата значения из функции. Оператор return использовать не обязательно: программа вернет управление после достижения конца функции.
Методы аналогичны глобальным функциям, однако областью их действия является класс или interface, в котором они определены. Кроме того, они могут содержать модификаторы, определяющие их видимость и поведение. Метод в interface не может содержать тела, а метод в классе, напротив, обязан содержать тело. Для этого правила имеется одно исключение: если метод класса помечен модификатором abstract, то есть является абстрактным, или сам класс имеет модификатор abstract, метод не может содержать тело.
Можно объявить тип данных, которые возвращает метод или функция, воспользовавшись аннотацией типа. Если в качестве типа возвращаемых данных указано void, ни один из операторов return внутри функции не может возвращать значение. Если в качестве типа возвращаемых данных указывается значение, отличное от void, все операторы return в функции должны возвращать значения, которые можно привести к указанному типу данных. Если тип возвращаемых данных указан, однако в теле функции содержится оператор return, который не возвращает значение, или по достижении конца функции оператор return не обнаружен, возвращается значение undefined. Функции конструктора не могут указывать тип возвращаемых данных, поскольку оператор new автоматически возвращает создаваемый объект.
Если тип возвращаемых данных функции не указывается явно, в качестве типа возвращаемых данных устанавливается значение Object или void. Тип возвращаемых данных void устанавливается в том случае, если в теле функции не содержится операторов return или имеется оператор return, который не возвращает значение.
В качестве последнего параметра функции можно указывать массив параметров. Если после обязательных параметров в функцию передаются дополнительные аргументы, все такие аргументы помещаются в массив параметров. Для последнего параметра обязательно указывать аннотацию типа: он должен быть типизированным массивом. Чтобы функция могла принимать параметры произвольного типа, используйте в качестве типизированного массива Object[]. При вызове функции, которая может принимать переменное число аргументов, вместо передачи списка параметров можно использовать явно определенный массив ожидаемого типа.
Вызывая функцию, следует обязательно указывать скобки и все обязательные параметры. При вызове функции без скобок возвращается текст функции, а не ее результаты.
Пример 1
В следующем примере демонстрируется первый синтаксис использования оператора function:
interface IForm {
// This is using function in Syntax 3.
function blank() : String;
}
class CForm implements IForm {
// This is using function in Syntax 2.
function blank() : String {
return("This is blank.");
}
}
// This is using function in Syntax 1.
function addSquares(x : double, y : double) : double {
return(x*x + y*y);
}
// Now call the function.
var z : double = addSquares(3.,4.);
print(z);
// Call the method.
var derivedForm : CForm = new CForm;
print(derivedForm.blank());
// Call the inherited method.
var baseForm : IForm = derivedForm;
print(baseForm.blank());
После выполнения этой программы выводится следующий результат:
25
This is blank.
This is blank.
Пример 2
В данном примере для функции printFacts объявляется входной параметр String и массив параметров для передачи переменного числа объектов Object.
function printFacts(name : String, ... info : Object[]) {
print("Name: " + name);
print("Number of extra information: " + info.length);
for (var factNum in info) {
print(factNum + ": " + info[factNum]);
}
}
// Pass several arguments to the function.
printFacts("HAL 9000", "Urbana, Illinois", new Date(1997,0,12));
// Here the array is intrepeted as containing arguments for the function.
printFacts("monolith", [1, 4, 9]);
// Here the array is just one of the arguments.
printFacts("monolith", [1, 4, 9], "dimensions");
printFacts("monolith", "dimensions are", [1, 4, 9]);
При выполнении этой программы выводится следующий результат:
Name: HAL 9000
Number of extra information: 2
0: Urbana, Illinois
1: Sun Jan 12 00:00:00 PST 1997
Name: monolith
Number of extra information: 3
0: 1
1: 4
2: 9
Name: monolith
Number of extra information: 2
0: 1,4,9
1: dimensions
Name: monolith
Number of extra information: 2
0: dimensions are
1: 1,4,9
Требования
Версия 1 (для синтаксиса 1)Версия .NET (для синтаксисов 2 и 3)