ILE RPG サブプロシージャの使い方 (3) - サブプロシージャを独立させる -

ILE RPG サブプロシージャの使い方 (2) - サブプロシージャからサブプロシージャを呼び出す -」で、サブプロシージャから自由にサブプロシージャを呼ぶことができる、ということを見ました。

今回は、さらに自由に使うためにサブプロシージャの独立性を高めるためのやりかたを見ていきたいと思います。


サブプロシージャをすべて共用可能にする

Factorial サブプロシージャを独立させることが可能だったように、この Perm サブプロシージャも独立させて共有できるようにすることもできます。

Factorial サブプロシージャを独立させるところで紹介したように、処理の記述を別ソースとして独立させて、NOMAIN キーワード、EXPORT キーワード、プロトタイプ定義の記述を加えれば OK です。

      *                                                                                             
      * CRTRPGMOD MODULE(PERM) SRCFILE(QRPGLESRC) DBGVIEW(*SOURCE)                                  
      *                                                                                             
     H NOMAIN                                                                                       
      *                                                                                             
     Dperm             PR             8f                                                            
     D p1                            10i 0                                                          
     D p2                            10i 0                                                          
      *                                                                                             
     Pperm             B                   EXPORT                                                   
     Dperm             PI             8f                                                            
     D n                             10i 0                                                          
     D r                             10i 0                                                          
      *                                                                                             
     D nr              S             10i 0                                                          
     D n1              S              8f                                                            
     D nr1             S              8f                                                            
     D p               S              8f                                                            
      *                                                                                             
     Dfactorial        PR             8f                                                            
     D p1                            10i 0                                                          
      *                                                                                             
      /free                                                                                         
                                                                                                    
          nr = n - r ;                                                                              
                                                                                                    
          n1 = factorial(n) ;                                                                       
          nr1 = factorial(nr) ;                                                                     
          p = n1/nr1 ;                                                                              
                                                                                                    
          return p ;                                                                                
                                                                                                    
      /end-free                                                                                     
     Pperm             E                                                                            
      *                                                                                             

CRTRPGMOD コマンドでモジュールを作成します。

呼び出す元のメインのプログラムはプロトタイプ定義を記述するだけで OK になります。
だいぶスッキリしましたね。

TESTFP2

      *                                                                                             
      * CRTRPGMOD MODULE(TESTFP2) SRCFILE(QRPGLESRC) DBGVIEW(*SOURCE)                               
      * CRTPGM PGM(TESTFP2) MODULE(TESTFP2 FACTORIAL PERM)                                          
      *                                                                                             
      * CRTSRVPGM SRVPGM(MATH) MODULE(FACTORIAL PERM) SRCFILE(QSRVSRC)                              
      * CRTPGM PGM(TESTFP3) MODULE(TESTFP2) BNDSRVPGM(MATH)                                         
      *                                                                                             
     DPerm             PR             8f                                                            
     D p1                            10i 0                                                          
     D p2                            10i 0                                                          
      *                                                                                             
     D k               S             10i 0                                                          
     D r               S             10i 0                                                          
     D n               S             10i 0                                                          
      *                                                                                             
      /free                                                                                         
                                                                                                    
          n = 5 ;                                                                                   
          r = 2 ;                                                                                   
          k = perm(n : r) ;                                                                         
          dsply  %char(k) ;                                                                         
          return ;                                                                                  
                                                                                                    
      /end-free                                                                                     
      *                                                                                             

こちらも CRTRPGMOD コマンドでモジュールを作成します。

CRTPGM コマンドで、使用するサブプロシージャすべてのモジュールとメイン・プログラムを指定して、実行可能プログラムを作成します。

[Top Pageに戻る]

Ads by TOK2