Platform: All
Version: Flash 9 and above/ActionScritp 3.0
シンタックス
function functionName(parameter0, parameter1, ...rest) {
// ステートメント
}
パラメータ
rest:* − 関数に渡される引数を格納した配列名の識別子。パラメータ名はrestでなくても構いません。キーワード(予約語)以外の任意の名前がつけられます[*1]。...(rest)パラメータのデータ型として、Arrayを指定することができます。ただし、混乱を招くことがありえます。パラメータはカンマ区切りの値を受取るのであって、Arrayクラスのインスタンスそのものとはいえないからです[*2]。
[訳者注*1] 通常の識別子の決まりに従います。
[訳者注*2] カンマ区切りの引数が配列に格納され、その配列がrestパラメータに代入されます。従来のargumentsオブジェクトに替わるパラメータです(後述「説明」参照。argumentsクラスはActionScript 3.0でもサポートされます。ただし、...(rest)の使用が推奨されています)。
|
説明
関数(function)がカンマ区切りの引数を任意の数受取る指定です。引数のリストは、配列とされます。この配列は、関数本体の中で使用することが可能です。配列の名前は、(関数の)パラメータ宣言中に、...記号に続けて指定します。パラメータには、予約語以外の任意の名前をつけることができます[*1]。
他のパラメータとともに用いる場合には、...(rest)パラメータの宣言は最後に指定しなければなりません。...(rest)パラメータ配列は、関数に渡された引数が他のパラメータの数より多い場合にのみ生成されます。
カンマ区切りのリスト中の各引数は、配列要素として格納されます。Arrayクラスのインスタンスが(引数として)渡された場合には、その配列そのものが...(rest)パラメータ配列の1エレメントとして格納されます。
このパラメータを用いると、argumentsオブジェクトは使用できません。...(rest)パラメータは、arguments配列やarguments.lengthと同じ機能を備えます。ただし、arguments.calleeに相当する機能がありません。arguments.calleeを用いる必要がないか、...(rest)パラメータの使用に先立って確認する必要があります。
例[*3]
つぎの例は、...(rest)パラメータを、ふたつの異なる関数(function)で使用しています[*4]。最初の関数は、rest配列内の各引数に対して、単にtrace()関数を呼出します。つぎの関数average()は、引数のリストを取出して、その平均を返します。2番目の関数はまた、パラメータにargsという別の名前を使っています。
package {
import flash.display.MovieClip;
public class RestParamExample extends MovieClip {
public function RestParamExample() {
traceParams(100, 130, "two");// 出力: 100,130,two
trace(average(4, 7, 13));// 出力: 8
}
}
}
function traceParams(... rest) {
trace(rest);
}
function average(... args):Number {
var sum:Number = 0;
for (var i:uint = 0; i < args.length; i++) {
sum += args[i];
}
return (sum / args.length);
}
|
[訳者注*3] 別の例をご紹介します。以下に定義するクラスMyArrayはArrayクラスを継承し、コンストラクタ関数はArrayと同じく複数のシンタックスで引数を受取ります。
// ActionScript 3.0クラス定義ファイル: MyArray.as
package {
dynamic public class MyArray extends Array {;
public function MyArray(...args) {
if (args.length == 1 && !isNaN(args[0])) {
this.length = args[0];
} else {
push.apply(this, args);
}
}
}
}
// Flash(SWF)ムービー: テスト用
// フレームアクション
var my0_array:MyArray = new MyArray();
var my1_array:MyArray = new MyArray(3);
var my2_array:MyArray = new MyArray("a");
var my3_array:MyArray = new MyArray(0, 1, 2);
trace(my0_array.length); // 出力: 0
trace(my1_array); // 出力: ,,
trace(my2_array); // 出力: a
trace(my3_array); // 出力: 0,1,2
|
[訳者注*4] ActionScript 3.0クラスRestParamExampleは、Flashムービー(.fla)ファイルの[Document class]に設定します(図001)。また、クラス定義ファイルRestParamExample.asは、Flashムービーと同階層に保存します。
図001■プロパティインスペクタで[Document class]を設定
|
Player
ActionScript 3.0/Flash Player 9以降。
関連項目
Arguments (オブジェクト)
出典
[ActionScript 3.0 Language Reference] > [Statements, Keywords & Directives] > [...(rest) parameter]
作成者: 野中文雄
作成日: 2007年3月31日