1.5.3 ENTRY文

FORTRANでメソッド(元サブルーチン)を書く時, いろいろな場合を想定して, なるべく汎用的なメソッド(元サブルーチン)にしようとすると, 引数がどんどん増えて困ることがある. 大事な引数は2-3個なのに, どうでもよいような引数がずらずらと並んでいると, それだけで call .... と書く手が重くなってくる.

そのような時にENTRY文を使うと解決できる場合がある. ENTRY文とは, メソッド(元サブルーチン)の途中から実行を始めるための文である.

*−−−−−- main program −−−−−-
      REAL X(10)
      .......
      CALL TABLE(X, 10)
      .......
      END
*−−−−−−−−−−−−−−−-
      SUBROUTINE TABLE(X,N)
      REAL       X(N)
      DATA       IOU /6/
      SAVE

      WRITE(IOU,'(10F12.4)') X
      RETURN

      ENTRY IOUSET(IOU0)
      IOU = IOU0
      RETURN
      END

このメソッド(元サブルーチン)tableは 1次元配列xを出力するものであるが, tableだけを呼べば, DATA文で指定されたiouの機番(6)に出力される. ファイルなど別の機番に出力させたい場合は, table を呼ぶ前にiouset を呼んで, iouを書き換えておけばよい. つまり, 1つのメソッド(元サブルーチン)に, 印刷すべき変数だけを与える入口と, その他のパラメータを設定する入口の, 2つの入口を作るわけである.

ここで, 注意すべきことはSUBROUTINE文またはENTRY文で指定された引数は, そのSUBROUTINE文またはENTRY文から入った時でないと使えないことである. 例えば, このプログラムのENTRY文から入った時(iousetが呼ばれた時), 変数n を引用することはできない. 同じように, tableが呼ばれた時にiou0を引用することはできないので, iousetが呼ばれたときにiouに代入しておかなければならない. また, このようなプログラムでもSAVE文とDATA文は不可欠である.