Enumerator オブジェクト
更新 : 2007 年 11 月
コレクション内の項目を列挙する手段を提供します。
varName = new Enumerator([collection])
引数
varName
必ず指定します。列挙子を代入する変数名。collection
省略可能です。配列やコレクションなど、IEnumerable インターフェイスを実装するオブジェクト。
解説
コレクションは JScript で自動的に列挙できます。したがって、コレクションのメンバにアクセスするために、Enumerator オブジェクトを使用する必要はありません。for...in ステートメントを使用して、メンバに直接アクセスできます。Enumerator オブジェクトは下位互換性を維持するために用意されています。
コレクションは、そのメンバに直接アクセスできないという点で配列とは異なります。配列の場合はインデックスを使って項目にアクセスできますが、コレクションでは、現在の項目を指すポインタをコレクション内の最初の項目に移動したり、次の項目に移動したりするしかありません。
Enumerator オブジェクトは、コレクション内の任意のメンバにアクセスする手段を提供するオブジェクトで、VBScript の For...Each ステートメントと同じように動作します。
IEnumerable を実装するクラスを定義して、JScript でコレクションを作成できます。コレクションは、他の言語 (Visual Basic など) や ActiveXObject オブジェクトを使用しても作成できます。
例 1
次のコードは Enumerator オブジェクトを使用して、使用可能なドライブ文字と、名前が使用できる場合はその名前を出力します。
// Declare variables.
var n, x;
var fso : ActiveXObject = new ActiveXObject("Scripting.FileSystemObject");
// Create Enumerator on Drives.
var e : Enumerator = new Enumerator(fso.Drives);
for (;!e.atEnd();e.moveNext()) { // Loop over the drives collection.
x = e.item();
if (x.DriveType == 3) // See if network drive.
n = x.ShareName; // Get share name
else if (x.IsReady) // See if drive is ready.
n = x.VolumeName; // Get volume name.
else
n = "[Drive not ready]";
print(x.DriveLetter + " - " + n);
}
システムによって異なりますが、出力は次のようになります。
A - [Drive not ready]
C - DRV1
D - BACKUP
E - [Drive not ready]
例 2
例 1 のコードは、Enumerator オブジェクトを使用せずに、次のように記述することもできます。この場合、列挙体のメンバには直接アクセスできます。
// Declare variables.
var n, x;
var fso : ActiveXObject = new ActiveXObject("Scripting.FileSystemObject");
// The following three lines are not needed.
// var e : Enumerator = new Enumerator(fso.Drives);
// for (;!e.atEnd();e.moveNext()) {
// x = e.item();
// Access the members of the enumeration directly.
for (x in fso.Drives) { // Loop over the drives collection.
if (x.DriveType == 3) // See if network drive.
n = x.ShareName; // Get share name
else if (x.IsReady) // See if drive is ready.
n = x.VolumeName; // Get volume name.
else
n = "[Drive not ready]";
print(x.DriveLetter + " - " + n);
}
プロパティ
Enumerator オブジェクトには、プロパティはありません。