1. ASSIGNステートメント

代入ステートメントは、式を計算し、その結果を複数のターゲット変数に割り当てます。このとき、ターゲット変数または疑似変数の属性がソースの属性と異なる場合があるので、データ変換が必要になる場合があります。

figure syntax assignment
項目 説明

reference

ターゲット変数または疑似変数を記述します。

expression

ソースの式です。

BY NAME

構造体割り当てに使用されるオプションです。詳細については、割り当ての実行を参照してください。

複合代入ステートメント

複合代入ステートメントは、複合代入演算子を使用して割り当てを行います。

figure syntax assignment compound
項目 説明

reference

ターゲット変数または疑似変数を記述します。

compound operator

割り当てが行われる前に、ソースとターゲットに適用する演算子を記述します。

複合代入ステートメントに使用可能な複合代入演算子は以下のとおりです。

  • += : 加算後に代入

  • -= : 減算後に代入

  • *= : 乗算後に代入

  • /= : 除算後に代入

  • **= : 累乗演算後に代入

  • ||= : 連結演算後に代入

  • |= : OR演算後に代入

  • &= : AND演算後に代入

  • ^= または <> : XOR(排他的論理和)演算後に代入

expression

ソースの式です。

以下は、複合代入ステートメントの実行例です。

 X += 5;      ==> X = X + 5;
 X *= Y - 1;  ==> X = X * (Y - 1);
ターゲット変数

ターゲット変数は、要素変数、配列変数、構造体変数または疑似変数にすることができます。

  • 配列ターゲット

    • ターゲットは、スカラーまたは構造体の配列である必要があります。ソースは、スカラー式であるか、そのターゲットと同じ次元数と境界を持つ式でなければなりません。

  • 構造体ターゲット

    • BY NAMEが記述されている場合、各ターゲットは構造体である必要があり、ソースも構造体でなければなりません。

    • BY NAMEが記述されていない場合、各ターゲットは構造体であり、ソースはスカラーまたはターゲットと同じ構造の構造体でなければなりません。

    • BY NAMEが記述されていない場合、ソースをNULL文字列("")にすると、以下のように処理されます。

      1. すべてのターゲットは、'00’Xで埋められます。

      2. すべての数値ターゲットは0に設定されます。

      3. すべての文字およびグラフィック・ターゲットは空白で埋められます。

割り当ての実行
  • 配列割り当て

    • すべての配列演算子(ソースとターゲット)は、同じ次元数と境界を持つ必要があります。

    • 配列の割り当ては、以下のようにループに展開されます。

       DO I1 = LBOUND( target-variable, 1 ) to HBOUND( target-variable, 1 );
       DO I2 = LBOUND( target-variable, 2 ) to HBOUND( target-variable, 2  );
      ...
       DO IN = LBOUND( target-variable, N ) to HBOUND( target-variable, N );
      
         generated element assignment ;
      
       END;
    • Nは、ターゲットの次元数です。生成された代入ステートメントでは、I1からINを添え字として使用します。ソースがスカラーである場合は、添え字は適用されません。

  • 構造体割り当て

    • BY NAMEが記述されてない場合、以下のように処理されます。

      • すべての演算子は配列であってはならず、同じ構造を持つ構造体である必要があります。メンバーとして配列を含むことはできます。

      • それぞれのメンバー別に割り当てで拡張します。メンバーがn個であれば、n個の割り当てが実行されます。

      • メンバー割り当てが、再び集合割り当てである場合は、拡張されて処理されます。

    • BY NAMEが記述されている場合、以下のように処理されます。

      1. ターゲット構造体の最初から、メンバー名と同じ名前をソース・メンバーから検索します。このときメンバーは、構造体のすぐ下のレベル(チャイルド)のみを探します。チャイルドのチャイルドは検索しません。

      2. 見つからなかった場合は、2番目のメンバー、3番目のメンバーなど、見つかるまで繰り返します。

      3. 見つかったメンバーが構造体または構造体の配列の割り当てである場合は、BY NAMEオプションが付けられます。

      4. 見つかったメンバーがスカラーまたはスカラーの配列の場合は、エレメント割り当てを実行します。

      5. 他のメンバーに上記の操作を同様に適用します。

    • 以下は、BY NAMEを使用した構造体割り当ての例です。

       DCL 1 ONE,              DCL 1 TWO,              DCL 1 THREE
             2 PART1,                2 PART1,                2 PART1,
               3 RED,                  3 BLUE,                 3 RED,
               3 ORANGE,               3 GREEN,                3 BLUE,
             2 PART2,                  3 RED,                  3 BROWN,
               3 YELLOW,             2 PART2,                2 PART2,
               3 BLUE,                 3 BROWN,                3 YELLOW,
               3 GREEN;                3 YELLOW;               3 GREEN;