次の方法で共有


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 となる場合があります。この配列は、3 つのピリオド (...)、パラメータ配列名、および型指定された配列の型の注釈で表されます。

  • type
    省略可能です。メソッドの戻り値の型を指定します。

  • body
    省略可能です。関数またはメソッドの動作を定義する 1 つ以上のステートメントを指定します。

解説

function ステートメントは、関数を宣言するときに使用します。body に記述したコードは、スクリプトの他の場所でこの関数が呼び出されるまでは実行されません。return ステートメントは、関数から値を返すときに使用されます。return ステートメントは使用しなくてもかまいません。関数の終わりに達すると、プログラムは関数から戻ります。

メソッドはグローバル関数に似ていますが、スコープは定義されている class または interface となり、参照可能範囲や動作を制御するさまざまな修飾子を指定できます。interface 内では、メソッドは本体を持ちません。class 内のメソッドには、本体を指定する必要があります。ただし、class 内のメソッドが abstract であるか、classabstract である場合、メソッドは本体を持ちません。

型の注釈を使用して、関数またはメソッドが返すデータ型を宣言できます。戻り値の型として void が指定されている場合は、関数内部のどの return ステートメントからも値が返されないことがあります。void 以外の戻り値の型を指定すると、関数内のすべての return ステートメントは、指定した戻り値の型に変換可能な値を返す必要があります。戻り値の型を指定して、return ステートメントに値を指定しなかった場合、または return ステートメントが実行されないまま関数の終わりに到達した場合は、undefined 値が返されます。コンストラクタ関数には戻り値の型を指定できません。new 演算子が、作成されるオブジェクトを自動的に返します。

関数に対して戻り値の型を明示的に指定しない場合、戻り値の型は Object または void になります。return ステートメントがない場合、または関数本体で return ステートメントに値が指定されていない場合、戻り値の型は void になります。

関数の最後のパラメータとして、パラメータ配列を使用できます。必須のパラメータより後で関数に渡される引数は、パラメータ配列に入れられます。パラメータの型の注釈は省略できますが、型指定された配列である必要があります。任意の型のパラメータを受け取るために、型指定された配列として Object[] を使用します。引数の数が変化する関数を呼び出すときに、予期される型の明示的な配列がパラメータのリストの代わりに使用されます。

関数を呼び出すときは、必須の引数とかっこを記述してください。かっこを付けずに関数を呼び出すと、関数の結果ではなく、関数のテキストが返されます。

例 1

次のコードは、function ステートメントの構文 1 の使用例です。

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

必要条件

バージョン 1 (構文 1)
バージョン .NET (構文 2 および構文 3)

参照

概念

変数と定数のスコープ

型の注釈

型指定された配列

参照

new 演算子

class ステートメント

interface ステートメント

return ステートメント

その他の技術情報

修飾子