構造型構造体の成分の引用は,次の形式を取ります。
parent [%component [(s-list)]]... %component [(s-list)]
parent
構造型のスカラまたは配列の名前。パーセント記号 (%) は成分選択子と呼ばれます。
component
直前の親または成分の成分の名前。
s-list
1 つまたは複数の添字の並び。並びが添字三つ組またはベクトル添字を含んでいる場合,この引用は部分配列に対する引用です。
任意の s-list の中の添字の数は,直前の親または成分の次元数と同じでなければなりません。
規則と振る舞い
すべての親または成分 (右端のものを除く) は,構造型でなくてはなりません。
親,または成分の 1 つは,ゼロでない次元数を持つ (すなわち配列になる) ことができます。ゼロでない次元数の親または成分の右側にあるすべての成分は,POINTER 属性を持つことができません。
構造体成分の次元数は,ゼロでない次元数の部分 (親または成分) の次元数です。そのような部分がない場合にはゼロになります。構造体成分の型と型パラメタ (存在する場合) は,一番右の部分の名前と等しくなります。
構造体成分は,親オブジェクト宣言の前に引用または定義することはできません。
親オブジェクトが INTENT,TARGET,または PARAMETER 属性を持っている場合,構造体成分もその属性を持つことになります。
例
次の例は,2 つの成分を持つ構造型定義を示しています。
TYPE EMPLOYEE INTEGER ID CHARACTER(LEN=40) NAME END TYPE EMPLOYEE
次の例は,CONTRACT を型 EMPLOYEE として宣言する方法を示しています。
TYPE(EMPLOYEE) :: CONTRACT
どちらの例も,TYPE キーワードで始まっていることに注意してください。構造型定義の最初の文は構造型文と呼ばれ,構造型オブジェクトを宣言する文は TYPE 文と呼ばれます。
次の例は,親構造体 CONTRACT の成分 ID を引用する方法を示しています。
CONTRACT%ID
次の例は,事前に定義されている型の成分を使用した構造型を示しています。
TYPE DOT REAL X, Y END TYPE DOT .... TYPE SCREEN TYPE(DOT) C, D END TYPE SCREEN
次の例は,型 SCREEN の変数を宣言しています。
TYPE(SCREEN) M
変数 M は,成分として M%C と M%D を持っています (どちらも型 DOT)。M%C は,REAL 型の成分,M%C%X と M%C%Y を持っています。
次の例は,配列の成分を持つ構造型を示しています。
TYPE CAR_INFO INTEGER YEAR CHARACTER(LEN=15), DIMENSION(10) :: MAKER CHARACTER(LEN=10) MODEL, BODY_TYPE*8 REAL PRICE END TYPE ... TYPE(CAR_INFO) MY_CAR
MODEL の文字長は 10 で,BODY_TYPE の文字長は 8 であることに注意してください。構造体の成分には値を代入することができます。
MY_CAR%YEAR = 1985
次の例は,配列構造体の成分を示しています。
MY_CAR%MAKER
上の例で,MAKER の後に添字並び (または部分列) が追加されていた場合,その引用は配列構造体成分ではなく,配列要素または部分配列の引用となります。
次の例を考えます。
MY_CAR%MAKER(2) (4:10)
この例では,成分は,配列 MAKER の第 2 の要素の 4 ~ 10 文字の部分列です。
次の例を考えます。
TYPE CHARGE INTEGER PARTS(40) REAL LABOR REAL MILEAGE END TYPE CHARGE TYPE(CHARGE) MONTH TYPE(CHARGE) YEAR(12)
以下に,この型に対する有効な配列引用の例をいくつか示します。
MONTH%PARTS(I) ! 配列要素 MONTH%PARTS(I:K) ! 部分配列 YEAR(I)%PARTS ! 配列構造体成分 (全体配列) YEAR(J)%PARTS(I) ! 配列要素 YEAR(J)%PARTS(I:K) ! 部分配列 YEAR(J:K)%PARTS(I) ! 部分配列 YEAR%PARTS(I) ! 部分配列
次の例は,定義されている型のポインタ成分を含んでいる構造型を示しています。
TYPE NUMBER INTEGER NUM TYPE(NUMBER), POINTER :: START_NUM => NULL() TYPE(NUMBER), POINTER :: NEXT_NUM => NULL() END TYPE
この種の型を使うと,型 NUMBER のオブジェクトの結合一覧を構築することができます。ポインタには,暗黙的初期値指定として空状態が与えられていることに注意してください。
次の例は非公開な型を示しています。
TYPE, PRIVATE :: SYMBOL LOGICAL TEST CHARACTER(LEN=50) EXPLANATION END TYPE SYMBOL
この型はモジュールに対して非公開です。モジュールは他の有効域からも使用できますが,型 SYMBOL は使用できません。
関連情報
配列要素の引用については,「配列要素」を参照してください。
部分配列の引用については,「部分配列」を参照してください。
モジュール内の構造型の例については,「モジュールとモジュール手続」を参照してください。