Fortran

Fortranの派生型・再利用・ビルド

データ構造を作り、複数ファイルのプログラムへ発展させます。

Fortran入門の講座一覧

01

派生型でデータをまとめる

派生型は、名前や点数など関係する値を一つのデータ型へまとめる機能です。

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

派生型の要素へは%でアクセスします。複数の手続きで同じデータを扱うようになったら、派生型をモジュールへ移します。

02

モジュールで公開範囲を整理する

モジュールは型、定数、関数、サブルーチンをまとめる単位です。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と書きます。公開する名前を絞ると、内部の変数を不用意に変更されにくくなります。

03

複数ファイルをコンパイルする

モジュールを含むファイルを先にコンパイルし、その後で利用側をコンパイルします。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などのビルドツールを使い、変更したファイルだけを再コンパイルできるようにします。

04

練習

student型と合格者数を数える関数をモジュールへ移してください。use ... only:で公開する名前を限定し、複数ファイルからコンパイルします。