RPG

279. プログラムのプロシージャー呼出し

フリー・フォーマットが導入されてから確かに RPG は進化した。
特に算術演算は数学の数式に近い記述ができるので
直感的でわかりやすくなった。

最近ではフリー・フォーマットによる記述の割合が増えてきた。
そこで RPG 内から別のサブ・プログラムの呼出しも
プロシージャーのような呼出しはできないものか ?
フリー・フォーマット中でのプロシージャーの呼出しであれば
CALLPCALLB は必要なく、そのままプロシージャーを
あたかも新しい命令のようにして使用することができて
見た目にもわかりやすく洗練されたソースになる。

ここでは外部プログラムを CALL で呼び出すのではなく
プロシージャー化して呼び出す方法を紹介しよう。

【 例 】
 
   *  コマンドの実行: constant Type                       
  D QCMDEXC         PR                  EXTPGM('QCMDEXC') 
  D   CMDSTR                    1024    CONST             
  D   CMDLEN                      15  5 CONST             
  D   
       :
   /FREE                                          
      :                                
     QCMDEXC(CMD:CMDLEN);                         
   /END-FREE   
      :                                   
【 解説 】

お馴染みの QCMDEXC をプロシージャーとして

  D QCMDEXC         PR                  EXTPGM('QCMDEXC')

によってプロシージャーのプロトタイプを宣言している。
これが外部プログラムであることを示すのは

EXTPGM('QCMDEXC')

の部分である。
これによって QCMDEXC の実行は

QCMDEXC(CMD:CMDLEN);

だけであるから何とシンプルで見やすくわかりやすいものだろうか ?
一昔前の CALL による呼出しに比べればはるかに RPG は進化している。