配列 は、ある型の変数の順序付きリストから構成されている変数です。配列に含まれる変数をエレメント といいます。任意のデータ・パーツを基に複数のエレメントを含む配列を作成することが可能ですが、配列内のすべてのエレメントは同一のデータ・パーツを基に作成する必要があります。配列には、プログラム言語およびシステム・リソースの制限内で任意の数のエレメントを含めることができます。この演習では、EGL における配列の概要について説明し、配列を処理する Web ページの作成方法を示します。EGL における配列について詳しくは、ヘルプの「配列」を参照してください。
固定配列 と動的配列 は、レコード・パーツの一部としてではなく、独立した変数として作成されます (レコード・パーツ内で作成される配列は構造フィールド 配列といい、この演習で後で説明します)。固定配列は、静的配列 とも呼ばれ、作成時には指定数のエレメントを含みます。ただし、実行時にエレメントを追加または削除することができます。動的配列は、作成時に指定数のエレメントを含みません。
固定配列または動的配列を作成するには、最初に、そのエレメントの名前およびデータ・パーツを指定する必要があります。それから、一組の大括弧を追加して、変数が配列であることを指定します。固定配列の場合、大括弧内には配列内のエレメントの数が入ります。動的配列の場合は、大括弧内を空にします。いずれのタイプの配列についても、任意で maxSize プロパティーを設定して、配列内のエレメントの最大数を設定することができます。
例えば、int エレメントから構成される固定配列を作成するには、次のようにコードを記述します。この配列の場合、作成時には 5 つのエレメントが含まれていますが、最大サイズが指定されていないため、エレメントを追加または削除することができます。
myArray1 int[5];
int 変数の動的配列を作成するには、次のようにコードを記述します。
myArray2 int[];
maxSize プロパティーは、配列に含めることができるエレメントの最大数を設定します。作成時には 3 つのエレメントを含み、最大サイズが 10 エレメントの配列を作成するには、次のようにコードを記述します。
myArray3 int[3] {maxSize = 10};
構造フィールド配列 は、レコード・パーツ内のフィールドとなる配列です。ある人の名前を含むレコード・パーツ、およびその人の名前に対応する 3 つのアドレスが入る配列を定義するには、以下のようにコードを記述します。
record myPerson3Address type basicRecord 10 name; 20 firstName char(20); 20 lastName char(20); 10 address[3]; 20 street char(30); 20 city char(20); 20 state char(20); 20 postalCode char(20); end
多次元配列 は、配列の配列です。EGL は、7 次元までの配列をサポートしてます。例えば、それぞれ 3 つのエレメントから構成される 5 つの配列を含む配列を作成するには、次のようにコードを記述します。
myArray4 int[5][3];
配列でデータを使用するには、配列のどのエレメントを使用するか指定する必要があります。例えば、配列を 1 つ作成し、そのエレメントに 1 つずつ値を割り当てるには、以下のようにコードを記述します。
myArray5 int[3]; myArray5[1] = 6; myArray5[2] = 7; myArray5[3] = 7;
また、以下のように記述すると、配列内のそれぞれのエレメントに一度に値を割り当てることができます。
myArray6 int[3]; myArray6 = [6,7,8];
以下のように、レコード内における構造フィールド配列の使用方法は、通常のレコードの使用方法と似ています。
myPerson myPerson3Address myPerson.name.firstName = "Steve"; myPerson.name.lastName = "Smith": myPerson.address[1].city = "New York"; myPerson.address[2].city = "Los Angeles"; myPerson.address[3].city = "Atlanta";
この演習では、数値の配列のエレメントの最小値、最大値、および平均値を計算するページを作成します。このページの PageHandler では for ループを使用して、配列内のエレメントに順番にアクセスします。ループについては、このチュートリアルで後で説明します。
ArrayTest
package pagehandlers; PageHandler ArrayTest {view="ArrayTest.jsp", onPageLoadFunction=onPageLoad} //Variables myNumbers decimal(7,2)[8]; maximum decimal(7,2) {value=0}; minimum decimal(7,2) {value=0}; average decimal(7,2) {value=0}; //Function definitions Function onPageLoad() //Assign values to the array myNumbers[1] = 25.68; myNumbers[2] = 50.82; myNumbers[3] = 62.35; myNumbers[4] = 19.32; myNumbers[5] = 12.46; myNumbers[6] = 33.65; myNumbers[7] = 41.35; myNumbers[8] = 22.13; End Function calculateStatistics() //set the minimum and maximum values to the starting values minimum = myNumbers[1]; maximum = myNumbers[1]; //create a temporary variable to hold the sum of the numbers sum decimal(7,2); sum = 0; //create a counter variable to track //which element of the array is being used counter int = 1; //loop for each element in the myNumbers array for (counter from 1 to size(myNumbers) by 1) //check if the current number //is larger than the previous maximum if (maximum < myNumbers[counter]) maximum = myNumbers[counter]; end //check if the current number //is larger than the previous minimum if (minimum > myNumbers[counter]) minimum = myNumbers[counter]; end //add the current number to the running total sum = sum + myNumbers[counter]; //move to the next element in the array end //calculate the average of the numbers average = sum / size(myNumbers); end end
以下は、ここで挿入したコードに関する技術面での注釈です。
このデータは配列であるため、ページ上ではデータ・テーブルとして表示されます。データ・テーブルは一般的な HTML テーブルとは異なり、配列に対して適切なものになるように、実行時には可変長のコンテンツに合わせてサイズが変わります。
ページは次のようになります。
これで、「演習 1.6: 条件ステートメント」を開始する準備ができました。