function 문
업데이트: 2007년 11월
새 함수를 선언합니다. 이 문은 여러 컨텍스트에서 사용될 수 있습니다.
// 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 문을 사용하면 안 됩니다.
class나 interface로 범위가 지정되고, 여러 한정자에 의해 표시 유형과 동작이 달라질 수 있다는 점을 제외하고 메서드는 전역 함수와 비슷합니다. interface의 메서드에는 본문이 있을 수 없지만 class의 메서드에는 본문이 있어야 합니다. 하지만 이 규칙에는 예외가 있습니다. class의 메서드가 abstract이거나 class가 abstract이면 메서드에 본문이 있을 수 없습니다.
함수나 메서드에서 반환할 데이터 형식을 선언하기 위해 형식 주석을 사용할 수 있습니다. void가 반환 형식으로 지정되면 함수 내부의 return 문에서 반환되는 값이 없습니다. void이외의 반환 형식이 지정되어 있으면 함수의 모든 return 문에서는 지정한 반환 형식으로 강제 변환될 값을 반환해야 합니다. 반환 값이 지정되어 있지만 return 문에 값이 없거나 return 문 없이 함수의 끝에 도달한 경우 undefined 값이 반환됩니다. new 연산자는 만들어질 개체를 자동으로 반환하므로 생성자 함수는 반환 형식을 지정할 수 없습니다.
해당 함수에 대한 명시적 반환 형식이 지정되어 있지 않으면 반환 형식이 Object나 void로 설정됩니다. return 문이 없거나 함수 본문에서 return 문이 값 없이 표시될 때만 void 반환 형식이 선택됩니다.
매개 변수 배열은 함수의 마지막 매개 변수로 사용될 수 있습니다. 필요한 매개 변수 이외에 추가 인수가 함수에 전달되면 매개 변수 배열에 입력됩니다. 매개 변수의 형식 주석은 필수이므로 형식화된 배열이 되어야 합니다. 임의의 형식의 매개 변수를 받아들이려면 **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과 매개 변수 배열을 사용하여 여러 가지 Objects를 받아들입니다.
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