RPG

146. プロシージャー入門(1)

先のモジュラー・プログラミングではサブ・ルーチンではなく、プロシージャーを

使うべきである、との重要性について解説したが、実はプロシージャーは、さらに

大きな汎用性を持ち、広がりを見せてくることは次第に明らかになってくるはずである。

プロシージャーは、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            
-------------------------------------------------------------------------
1. プロシージャーの宣言
P GET_HINSHU      B                   EXPORT

は最初に行うプロシージャーの宣言であり、EXPORT は、このプロシージャーを外部の

プログラムから参照できるように EXPORT することを意味している。

2. プロトタイプの宣言
D                 PI            14
D  HNSCOD                        4A   VALUE

の行ではプロシージャーのプロトタイプを宣言している。

最初の PI の行は、プロシージャーの入り口であり、 14 は 14桁の文字列が

このプロシージャーの戻り値となることを示している。

PI に続く行は、すべてプロシージャーのパラメータであり、VALUE がそれを示している。

パラメータでない D-仕様書はこれらに続いて連続して記述してよいが、

バラメータとは混在しないように一行のスペース行を空けて記述すると見やすくなる。

ここでは

D NOTFOUND        C                   CONST(' 品種エラー   ')

という固定値を定義されているが、この箇所にはプロシージャー内で使用する変数を

D-仕様書として自由に定義することができる。

これらの変数は「ローカル変数」として、他のプロシージャーからは参照することは

できない。つまり、例えば、ある変数 SURYO をプロシージャー内のローカル変数として

定義し、別の異なるプロシージャー内でも同じ SURYO というローカル変数を定義したとしても

これらは別物であり、そのプロシージャー内だけでの完結した変数であると見なされる。

同じようにサブ・ルーチンを定義してもよいが定義するとすれば

P                 E

の直前に定義することになる。

しかし折角、プロシージャー定義でオブジェクト指向のプログラミング・モデルを作成している

のであるからサブ・ルーチンは、そろそろ捨ててもいいころである。