派生型でデータをまとめる
派生型は、名前や点数など関係する値を一つのデータ型へまとめる機能です。
student型を定義するFORTRAN
program derived_type
implicit none
type :: student
character(len=20) :: name
integer :: score
end type student
type(student) :: person
person = student('Aki', 85)
print *, trim(person%name), person%score
end program derived_type実行結果OUTPUT
Aki 85派生型の要素へは%でアクセスします。複数の手続きで同じデータを扱うようになったら、派生型をモジュールへ移します。
モジュールで公開範囲を整理する
モジュールは型、定数、関数、サブルーチンをまとめる単位です。privateで内部実装を隠し、publicで外部へ公開する設計もできます。
statistics.f90FORTRAN
module statistics
implicit none
private
public :: average
contains
real function average(values)
real, intent(in) :: values(:)
average = sum(values) / real(size(values))
end function average
end module statistics使う側はuse statistics, only: averageと書きます。公開する名前を絞ると、内部の変数を不用意に変更されにくくなります。
複数ファイルをコンパイルする
モジュールを含むファイルを先にコンパイルし、その後で利用側をコンパイルします。gfortranへ複数ファイルを渡す方法なら、最終的なリンクまで一度に行えます。
main.f90FORTRAN
program main
use statistics, only: average
implicit none
real :: values(3) = [2.0, 4.0, 8.0]
print *, average(values)
end program mainビルドと実行COMMAND / OUTPUT
gfortran -std=f2018 -Wall -Wextra statistics.f90 main.f90 -o statistics_app
./statistics_app
4.66666651規模が大きくなったら、MakefileやCMakeなどのビルドツールを使い、変更したファイルだけを再コンパイルできるようにします。
練習
student型と合格者数を数える関数をモジュールへ移してください。use ... only:で公開する名前を限定し、複数ファイルからコンパイルします。