サイトトップ

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

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

Vectorクラス

ID: FN0810001 Product: Flash Platform: All Version: CS4/ActionScript 3.0

パッケージ トップレベル
クラス public dynamic class Vector
継承 Vector → Object

説明
Vectorクラスを使うと、ベクトルにアクセスし、その操作をすることができます。ベクトル(Vectorインスタンス)は配列で、エレメントがすべて同じデータ型をもちます。Vectorエレメントのデータ型は、Vectorの「基本の型」とされます。基本の型はどのようなクラスでも差支えなく、定義済みのクラスからカスタムクラスまで含まれます。基本の型は、変数をVectorで宣言するとき、ならびにクラスのコンストラクタの呼出しによりインスタンスを作成するときに指定します。

Arrayと同じく、配列アクセス演算子([])を使って、Vectorエレメントの設定および取得ができます。Vectorのメソッドにも、エレメントの値を設定あるいは取得する作用を及ぼすものがあります。そうしたメソッドには、push()pop()shift()unshift()などが挙げられます。Vectorオブジェクトのプロパティおよびメソッドは、Arrayと似ており、多くの場合まったく同じです。Arrayを使おうとしたとき、そのエレメントがすべて同じデータ型の場合には、Vectorインスタンスを用いる方がよいでしょう。

Vectorの基本の型は、型パラメータシンタックスを後に付して指定します。型パラメータシンタックスは、ドット(.)に続けて、小なり不等号(<)、クラス名、そして大なり不等号(>)を順に書き連ねます。以下がその例です。

var v:Vector.<String>;
v = new Vector.<String>();

例の第1行目で、変数vがVector.<String>インスタンスとして宣言されています。つまり、Vector(配列)がStringインスタンスだけを包含し、そのVectorからはStringインスタンスのみ取得できることが示されました。第2行目は、同じ型のVectorインスタンス(すなわち、エレメントがすべてStringオブジェクトのVector)を生成し、vに代入します。

型パラメータシンタックスは、Vectorのデータ型を指定するたびに使います。それは、変数をVectorで宣言するときや、Vectorオブジェクトをインスタンス化する場合、メソッドのパラメータをVectorで指定したり、あるいはVector型をメソッドの戻り値に指定するときなどです。

Vector.<T>のデータ型を指定された変数には、同じ基本の型Tで生成されたVectorインスタンスのみを格納することができます。たとえば、new Vector.<String>()を呼出して生成したVectorは、Vector.<int>のデータ型で宣言した変数には代入できません。基本の型は厳密に一致する必要があります。たとえば、以下のコードは、コンパイルできません。オブジェクトの基本の型が、変数に宣言された基本の型と(SpriteはDisplayObjectのサブクラスであっても)同じではないからです。

// このコードはSpriteがDisplayObjectのサブクラスであってもコンパイルできない
var v:Vector.<DisplayObject> = new Vector.<Sprite>();

基本の型がTのVectorをTのスーパークラスのVectorに変換するには、グローバル関数Vector()を用います。

データ型の制限に加え、VectorクラスにはArrayクラスとは異なる制限がほかにもあります。

  • Vectorは密な(dense)配列です。Arrayは、インデックス0と7に値をもっても、1から6の位置に値のないことがあり得ます。それに対して、Vectorは各インデックスに値(またはnull)をもたなければなりません。
  • Vectorは、オプションで長さを固定できます。そうすると、保持するエレメント数は、変えられません。
  • Vectorエレメントにアクセスすると、範囲がチェックされます。最終エレメント(length - 1)より大きいインデックスの値を読取ることはできません。また、現在の最終インデックスのひとつ後より大きなインデックスには値が設定できません(いいかえれば、すでに存在するインデックスかlengthのインデックスにのみ値は設定できます)。

これらの制限の結果として、VectorにはArrayに比べて大きくふたつの利点があります。Vectorエレメントは、すべてひとつのクラスのインスタンスだからです。

  • パフォーマンス。配列エレメントへのアクセスおよびすべての値の取出しは、Vectorインスタンスを使うとArrayよりもずっと高速です。
  • 型の安全性。[Strictモード]では、コンパイラがデータ型のエラーを調べて、Vectorへのデータ型が合わない値の代入や、Vectorからの誤ったデータ型の値の読取りを検出します。ただし、注意すべき点として、push()unshift()メソッドを使ってVectorに値を加えると、引数のデータ型はコンパイル時にはチェックされず、ランタイムでチェックされます。

Player
ActionScript 3.0/Flash Player 10。

出典
[ActionScript 3.0 Language and Components Reference] > [Vector]


作成者: 野中文雄
作成日: 2008年10月8日


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