データ・パーツの配列
他の多くのプログラム言語と同様に、EGL では同じ型の変数を 配列にグループ化できます。 このトピックでは、EGL で配列を使用する場合の基礎について説明します。
配列 とは、同じ型の一連の変数を並べたものです。例えば、
次のような整変数の配列を定義できます。
myInts int[] = [1,2,3,4,5];
この場合の配列は、一連の 5 個の整変数となります。EGL では、配列に
番号が 1 から順に付けられます。つまりこの配列は、1 から 5 までの
番号が付けられた要素を持つことになります。配列内の各整数に対しては、その整数の索引番号を大括弧で囲んで
指定することによって、独立した変数の場合と同様にアクセスできます。
myInts[1] = 5+5;
myInts[2] = 16;
myInts[3] = myInts[1] + myInts[2];
また、以下のいずれかの方法を使用することで、配列に対して一度に複数の値を
代入することができます。
- 以下のようにして、値の設定ブロックを使用できます。
myStrings string[2]; myStrings {"Hello", "Goodbye"};この構文では、中括弧 ({) は使用していますが、等号 (=) は使用していません。 これは assignment ステートメントではなく、 値を配列に代入して、配列のプロパティーであるかのように要素を扱う方式です。 この方式は、他の方式 (配列に対して配列リテラルを使用する方式) よりも、 実行時のパフォーマンスが優れています。
また、この方式が機能するのは、新規の値を受け入れるための 十分な数の要素が、配列の中括弧内にある場合のみとなります。EGL では、 要素の自動追加を行いません。このため、値の設定ブロックを使用して 要素に値を代入する前に、配列に対して開始長を指定するか、配列に要素を追加する 必要があります。
- 以下のように、配列に対して配列リテラルを割り当てることができます。
この方式は、値の設定ブロックを使用する方式よりも、パフォーマンスが やや低下します。これは、生成されたコードによって、変数用とリテラル用の 2 つの配列を作成する必要があるためです。myBigInts bigint[]; myBigInts = [10,40];
myStringsInit string[] {"Hello", "Goodbye"};
myBigIntsInit bigint[] = [10, 40];
値の設定ブロックにおいて、開始値を指定するとともに、プロパティーを配列に
割り当てるには、プロパティーの名前と値のペアを開始値の後に挿入します。
myDecimals decimal(10,2)[3] {55.43, 22.12, 4.34, CurrencySymbol = "$"};
配列リテラル方式を使用して開始値を指定する場合は、値の設定ブロックで
通常通りにプロパティーを設定できます。myBools boolean[3]{MaxSize = 5} = [true, false, true];
配列の作成時に配列内の要素の数を指定すると、その配列は、指定された数の要素を
格納できるように初期化されます。各要素は、その型に応じたデフォルト値を取ります。
fiveInts int[5];
SysLib.writeStderr(fiveInts[1]); //「0」を書き込む
EGL が配列を初期化できるようにするために、コーディングにおいて、
配列の作成時に配列に対して開始長を指定することをお勧めします。要素の追加や削除は、後で
appendElement や removeElement などの配列関数を使用して、
いつでも実行できます。ただし、配列に対して開始長を指定していない場合、配列は NULL として開始されるため、
配列内にアクセスの対象が存在しないことになります。
nullArray int[];
nullArray[2] = 5; //NullValueException!
nullArray.appendElement(5); //NullValueException!
nullArray {1,2,3}; //NullValueException!
この場合は、まず配列リテラルで配列を初期化する必要があります。
nullArray2 int[];
nullArray2 = [1,2,3];
nullArray2.appendElement(4);
あるいは、値の設定ブロックを使用して、NULL の配列を初期化することもできます。
emptyArray int[]{};
emptyArray.appendElement(5);
上記の例では、値の設定ブロックは空です。値の設定ブロックを使用して、
配列内に現存する数以上の要素を配列に代入することはできません。この配列は
要素を持っていないため、値の設定ブロックを値なしで使用する必要があります。配列に対して、さらに長い配列リテラルを代入することによって、配列の長さを
伸ばすことができます。この場合は、短い配列が、より長い新規の配列で上書きされます。
以下の例では、5 つの要素を持つ配列リテラルを代入して、要素を 2 つしか持たない配列を
置き換えています。
smallIntArray int[2];
smallIntArray = [1,2,3,4,5];
ただし、値の設定ブロックを使用して、
配列内に現存する数以上の要素を配列に代入することはできません。
smallStrArray string[2];
smallStrArray {"ab", "cd", "ef", "gh"};
//IndexOutOfBoundsException! 配列には、要素が 2 個しかありません。
配列についての詳細は、「EGL 言語解説書」の『配列』を参照してください。