はじめに
第7回は、外部ルーチン・外部関数です。
まったく怖がる必要はありません、ただ関数化してmain programの外に記述するだけの話です。
外部ルーチンとは
main programの外に記述して、main programや他のサブルーチンから呼び出すサブルーチンのことです。
なお、サブルーチンとはある特定のタスクを実行するコードのまとまりのことを指します。
外部関数とは
上との比較で説明すると、外部ルーチンは変数を修正したり、表示を行うもの(手続き的な処理)、外部関数は何らか計算をして値を返すものとしてしばしば用いられます。(サブルーチンと関数の違いに由来しています)
解説
外部ルーチンと外部関数を具体例を用いて解説します。
具体例1(外部ルーチン)
! subroutine_module.f90 subroutine greet(name) character(len=*), intent(in) :: name print *, 'Hello, ', trim(name), '!' end subroutine greet ! main_program.f90 program main_program implicit none character(len=20) :: name ! Call the external subroutine name = 'John Doe' call greet(name) end program main_program
上の例に関して補足します。
外部ルーチン内での引数の宣言は、
(引数の型), intent(_) :: name で行います。
intent(_)には種類があり、
intent(in): 引数は読み取り専用だよ、書き換えないよ
intent(out): 引数は書き込み専用だよ、書き換えるよ
intent(inout): 引数は読み書きできるよ、サブルーチン内で書き換えたりするけど、実行が終わったら元に戻すよ
という意味があります。
具体例2(外部関数)
! Define the external function double precision function square(x) double precision, intent(in) :: x square = x * x end function square ! Main program that calls the external function program main implicit none double precision :: num, squared num = 5.0d0 squared = square(num) print *, 'The square of ', num, ' is ', squared end program main
まとめ
今回は外部ルーチン、外部関数について解説しました。サブルーチンは日本語でしばしば副ルーチンと呼ばれるということを最後に補足しておきます。
第8回は内部ルーチン・内部関数です。
注意
このページは大学のFortranの授業の予習で書いています。
直観的な理解をメモしているだけなので、厳密なところでは誤りがあるかもしれません。