先のモジュラー・プログラミングではサブ・ルーチンではなく、プロシージャーを
使うべきである、との重要性について解説したが、実はプロシージャーは、さらに
大きな汎用性を持ち、広がりを見せてくることは次第に明らかになってくるはずである。
プロシージャーは、EXPORT できる関数と考えることができる。
プロシージャーは、それ自体で完結している。
ここからはプロシージャーの機能をもう少し学習してみよう。
前に GET_HINSHU というプロシージャーを紹介した。
------------------------------------------------------------------------- C****************************************************** * GET_HINSHU : 品種名の取得 C****************************************************** P GET_HINSHU B EXPORT D GET_HINSHU PI 14 D HNSCOD 4A VALUE C SETOFF 99 C HNSCOD CHAIN HINSHU 99 C RETURN HNSNAM P GET_HINSHU E -------------------------------------------------------------------------
これを少し改造してみよう。
------------------------------------------------------------------------- C****************************************************** * GET_HINSHU : 品種名の取得 C****************************************************** P GET_HINSHU B EXPORT D PI 14 D HNSCOD 4A VALUE D NOTFOUND C CONST(' 品種エラー ') C SETOFF 99 C HNSCOD CHAIN HINSHU 99 C 99 MOVEL(P) NOTFOUND HNSNAM C RETURN HNSNAM P E -------------------------------------------------------------------------
P GET_HINSHU B EXPORT
は最初に行うプロシージャーの宣言であり、EXPORT は、このプロシージャーを外部の
プログラムから参照できるように EXPORT することを意味している。
D PI 14 D HNSCOD 4A VALUE
の行ではプロシージャーのプロトタイプを宣言している。
最初の PI の行は、プロシージャーの入り口であり、 14 は 14桁の文字列が
このプロシージャーの戻り値となることを示している。
PI に続く行は、すべてプロシージャーのパラメータであり、VALUE がそれを示している。
パラメータでない D-仕様書はこれらに続いて連続して記述してよいが、
バラメータとは混在しないように一行のスペース行を空けて記述すると見やすくなる。
ここでは
D NOTFOUND C CONST(' 品種エラー ')
という固定値を定義されているが、この箇所にはプロシージャー内で使用する変数を
D-仕様書として自由に定義することができる。
これらの変数は「ローカル変数」として、他のプロシージャーからは参照することは
できない。つまり、例えば、ある変数 SURYO をプロシージャー内のローカル変数として
定義し、別の異なるプロシージャー内でも同じ SURYO というローカル変数を定義したとしても
これらは別物であり、そのプロシージャー内だけでの完結した変数であると見なされる。
同じようにサブ・ルーチンを定義してもよいが定義するとすれば
P E
の直前に定義することになる。
しかし折角、プロシージャー定義でオブジェクト指向のプログラミング・モデルを作成している
のであるからサブ・ルーチンは、そろそろ捨ててもいいころである。