Fortranでオブジェクト指向(3)
本日取り上げるポイント
変数定義、implicit none, 型と属性の定義, INTENT属性
implicit none
CLASS(FACET), INTENT(INOUT) :: this
integer i
character(10), parameter :: header(3) = (/"1st point","2nd point","3rd point"/)
implicit none
FORTRAN77で多用されてきた
implicit real*8(a-h, o-z)
は今や禁止に近い非推奨です。
意図しない暗黙定義変数が使えてしまうため、
特に大規模なプログラムではエラーの原因となってきた
暗黙の型宣言は現在では使わず、すべてを明示的に
定義する implicit none を使用します。
型と属性を一行で定義する
CLASS(FACET), INTENT(INOUT) :: this
行ではCLASS構造体で読み込みと値を返すINTENT(INOUT)属性を
もつ変数thisを一行で定義しています。
このような場合は、変数名の前に:: (コロン二つ)を付けて区切ります。
型のみを定義する場合は
integer i
のように従来通り、型名をスペースで区切って変数名を記述します。
INTENT属性
INTENT(IN) の場合、引数は参照するのみ
INTENT(OUT) の場合、引数は値を返すのみ
INTENT(INOUT) の場合、引数を参照し、値を返す
属性を定義できます。この属性を使用すれば、参照のみするはずの
引数の値を変更したり、参照しないはずの値をプログラム内で参照する
などのミスをコンパイル段階で発見することが出来ます。
属性に反する記述をプログラム内部で行った場合、コンパイル時に
エラーになるので不注意から発生するバグを回避できます。
本日はこの辺で。