サイトトップ

Director Flash 書籍 業務内容 プロフィール

Adobe Flash非公式テクニカルノート

...(rest)パラメータ定義キーワード

ID: FN0703001 Product: Flash

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日


Copyright © 2001-2007 Fumio Nonaka.  All rights reserved.