演習 1.5: 配列

配列 は、ある型の変数の順序付きリストから構成されている変数です。配列に含まれる変数をエレメント といいます。任意のデータ・パーツを基に複数のエレメントを含む配列を作成することが可能ですが、配列内のすべてのエレメントは同一のデータ・パーツを基に作成する必要があります。配列には、プログラム言語およびシステム・リソースの制限内で任意の数のエレメントを含めることができます。この演習では、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";

Web ページでの配列の利用

この演習では、数値の配列のエレメントの最小値、最大値、および平均値を計算するページを作成します。このページの PageHandler では for ループを使用して、配列内のエレメントに順番にアクセスします。ループについては、このチュートリアルで後で説明します。

  1. プロジェクト・エクスプローラー・ビューで、「EGLWeb」プロジェクトをクリックして選択する。
  2. メニュー・バーから「ファイル」>「新規」>「Faces JSP ファイル」をクリックする。新規 Faces JSP ファイル・ウィザードが開きます。
  3. ファイル名」フィールドに次のファイル名を入力する。

    ArrayTest

  4. ページ・テンプレートから作成」チェック・ボックスを選択する。
  5. 次へ」をクリックする。
  6. ページ・テンプレート・タイプ」の下で、「ユーザー定義ページ・テンプレート」をクリックする。
  7. サムネール」の下で「A_gray.htpl」テンプレートをクリックする。
  8. 終了」をクリックする。新規ファイルがプロジェクトに追加され、そのファイルがエディターで開きます。
  9. 新規ファイルで、デフォルト・テキストの「Place your page content here.」を削除する。
  10. 削除したテキストの代わりに、Arrays と入力して、Enter キーを押す。
  11. ページを右クリックして、「ページ・コードの編集」をクリックする。ページ・コード・ファイルが開きます。
  12. ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
  13. 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

    以下は、ここで挿入したコードに関する技術面での注釈です。

  14. ファイルを保存して閉じる。

ページへのデータの追加

  1. ArrayTest.jsp ページに戻る。
  2. ページ・データ・ビューで、「ArrayTest」を展開する。
  3. ページ・データ・ビューから「myNumbers」をページ上へドラッグする。「リスト・コントロールの挿入」ウィンドウ が開きます。
  4. 既存レコードの表示 (読み取り専用)」をクリックする。
  5. 終了」をクリックする。
  6. このデータは配列であるため、ページ上ではデータ・テーブルとして表示されます。データ・テーブルは一般的な HTML テーブルとは異なり、配列に対して適切なものになるように、実行時には可変長のコンテンツに合わせてサイズが変わります。

  7. 新規データ・テーブルの下をクリックして Enter キーを押し、ブランク行を追加する。
  8. パレット・ビューの「Faces コンポーネント」ドロワーから、「コマンド - ボタン (Command - Button)」を新規ブランク行へドラッグする。
  9. ページ・データ・ビューで、「アクション」を展開する。
  10. calculateStatistics() 関数をページ・データ・ビューから ページの新規ボタンへドラッグする。
  11. プロパティー・ビューの「表示オプション」タブ で、ボタンのラベルを Calculate statistics に変更する。
  12. 新規ボタンの下をクリックして Enter キーを押し、別のブランク行を追加する。
  13. ページ・データ・ビューで、Ctrl キーを押しながら 3 つの変数 (「average」、「maximum」および「minimum」) をクリックして選択する。
  14. それらの変数をページの「Calculate statistics」ボタンの下へドラッグする。「挿入のコントロール」ウィンドウが開きます。
  15. 既存レコードの表示 (読み取り専用)」をクリックする。
  16. 終了」をクリックする。フィールドがページに追加されます。

    ページは次のようになります。

    ArrayTest.jsp ページの外観

  17. ページを保管する。
  18. ページをサーバーでテストする。「Calculate statistics」ボタンをクリックすると、ページの「Minimum」、「Maximum」、および「Average」フィールドが更新されます。

これで、『演習 1.6: 条件ステートメント』を開始する準備ができ ました。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.