割り当てステートメントは、式の計算結果に基づいて、 変数を定義または再定義する実行可能ステートメントです。
定義済みの割り当ては、組み込みではなく、 サブルーチンおよびインターフェース・ブロックによって定義されます。定義済み割り当てを参照してください。
組み込み割り当ての一般的な形式は、次のとおりです。
>>-variable-- = --expression----------------------------------->< |
variable と expression の形状は、
整合性がとれていなければなりません。
expression が配列であれば、variable も
配列でなければなりません (配列にかかわる式を参照してください)。 expression がスカラーで variable が配列の場合、
その expression は、すべての配列エレメントが expression の
スカラー値と同じ値を持つ variable と同じ形状の配列として扱われます。 variable は「多対 1」配列セクションに
してはなりません (詳細は ベクトル添え字を参照してください)。
また、variable も expression も、想定サイズ配列にはできません。
variable と expression の型は、
次に示すように整合性がとれていなければなりません。
variable の型 | expression の型 |
---|---|
数値 | 数値 |
論理 | 論理 |
文字 | 文字 |
派生型 | 派生型 (variable と同様) |
数値割り当てステートメントでは、variable および expression で、 異なる数値型と異なる kind 型付きパラメーターを指定できます。 論理割り当てステートメントの場合、kind 型付きパラメーターは異なります。 文字割り当てステートメントの場合、length 型付きパラメーターは異なります。
文字変数が文字式よりも長い場合、その文字式は、文字変数と長さが 等しくなるまで、ブランクによって右側方向に拡張されます。 文字変数が文字式より短い場合、その文字式は、文字変数と長さが 文字変数の長さに位置するように、文字式の右側が切り捨てられます。
variable がポインターである場合、その variable は、expression と整合性のある 型、型付きパラメーター、および形状を持つ定義可能なターゲットに関連させなければなりません。 そこで、expression の値は、variable に関連したターゲットに割り当てられます。
variable および expression の両方が variable のどの部分に対しても参照を行うことができます。
割り当てステートメントによって、expression および 割り当て前の variable 内のすべての式の計算、 必要に応じて variable の型や型付きパラメーターに 対する expression の変換、および結果値による variable の 定義が行われます。 長さがゼロの文字オブジェクトまたはサイズが ゼロの配列の場合、variable に対して値は割り当てられません。
派生型のオブジェクトに対してアクセス可能な定義済み割り当てがない場合、 その派生型割り当てステートメントは、組み込み割り当てステートメントになります。 派生型の式は、変数と同じ派生型でなければなりません。(2 つの構造体が同じ派生型の構造体であるかどうかを判別する 規則については、派生型の型の決め方を参照してください。) 式の各コンポーネントが対応する変数のコンポーネントに割り当てられているかのように、 割り当て (またはポインターの割り当て) が行われます。 ポインターの割り当ては、ポインターのコンポーネントに対して実行され、組み込み割り当ては、ポインター以外の 割り当て可能でないコンポーネントに対して実行されます。 割り当て可能なコンポーネントの場合は、 以下の操作の順序が適用されます。
それから、expression のコンポーネントの値が、組み込み割り当てを使用して、対応する variable の コンポーネントに割り当てられます。
variable がサブオブジェクトである場合、割り当ては、定義状況やオブジェクトの他の部分の値に影響しません。
数値組み込み割り当ての場合、expression の値は、下の表に指定したように、variable の型
および kind 型付きパラメーターに変換されることがあります。
variable の型 | 割り当てられる値 |
---|---|
整数 | INT(expression,KIND=KIND(variable)) |
実数 | REAL(expression,KIND=KIND(variable)) |
複素数 | CMPLX(expression,KIND=KIND(variable)) |
+----------------------------------IBM 拡張----------------------------------+
+------------------------------End of IBM 拡張-------------------------------+
文字変数を定義するのに必要となる数の文字式だけが評価されます。 たとえば、次のようになります。
CHARACTER SCOTT*4, DICK*8 SCOTT = DICK
SCOTT に DICK を割り当てるには、 事前にサブストリング DICK(1:4) を定義しておく必要があります。 DICK (DICK(5:8)) の残りの部分を事前に定義しておく必要はありません。
+----------------------------------IBM 拡張----------------------------------+
expression が算術式である場合は、算術割り当てを使用します。 同様に、expression が文字型である場合は文字割り当てを 使用し、expression が論理型である場合は論理割り当てを使用します。 式の右辺が BYTE 型の場合は、算術割り当てを使用します。
+------------------------------End of IBM 拡張-------------------------------+
INTEGER I(10) LOGICAL INSIDE REAL R,RMIN,RMAX REAL :: A=2.3,B=4.5,C=6.7 TYPE PERSON INTEGER(4) P_AGE CHARACTER(20) P_NAME END TYPE TYPE (PERSON) EMP1, EMP2 CHARACTER(10) :: CH = 'ABCDEFGHIJ' I = 5 ! All elements of I assigned value of 5 RMIN = 28.5 ; RMAX = 29.5 R = (-B + SQRT(B**2 - 4.0*A*C))/(2.0*A) INSIDE = (R .GE. RMIN) .AND. (R .LE. RMAX) CH(2:4) = CH(3:5) ! CH is now 'ACDEEFGHIJ' EMP1 = PERSON(45, 'Frank Jones') EMP2 = EMP1 ! EMP2%P_AGE is assigned EMP1%P_AGE using arithmetic assignment ! EMP2%P_NAME is assigned EMP1%P_NAME using character assignment END