構造体成分

構造型構造体の成分の引用は,次の形式を取ります。

parent [%component [(s-list)]]... %component [(s-list)]

parent
構造型のスカラまたは配列の名前。パーセント記号 (%) は成分選択子と呼ばれます。

component
直前の親または成分の成分の名前。

s-list
1 つまたは複数の添字の並び。並びが添字三つ組またはベクトル添字を含んでいる場合,この引用は部分配列に対する引用です。

個々の添字は,その次元の範囲内の値を持つスカラ整数 (またはその他の数値) 式でなくてはなりません。

任意の s-list の中の添字の数は,直前の親または成分の次元数と同じでなければなりません。

規則と振る舞い

すべての親または成分 (右端のものを除く) は,構造型でなくてはなりません。

親,または成分の 1 つは,ゼロでない次元数を持つ (すなわち配列になる) ことができます。ゼロでない次元数の親または成分の右側にあるすべての成分は,POINTER 属性を持つことができません。

構造体成分の次元数は,ゼロでない次元数の部分 (親または成分) の次元数です。そのような部分がない場合にはゼロになります。構造体成分の型と型パラメタ (存在する場合) は,一番右の部分の名前と等しくなります。

構造体成分は,親オブジェクト宣言の前に引用または定義することはできません。

親オブジェクトが INTENTTARGET,または 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%CM%D を持っています (どちらも型 DOT)。M%C は,REAL 型の成分,M%C%XM%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 は使用できません。

関連情報