RPG

190. エレガントな最新のLOOP文

先の「189.印刷出力だけの最も簡単なRPGプログラム」では演算命令を全く使わずに
印刷出力だけを行う事例を紹介したが、あえて演算命令で LOOP文 によって
商品マスター・レコードを読み取るようにするのであれば

   C                   DO        *HIVAL                                     
   C                   READ      SHOHIN                                 50  
   C   50              LEAVE                                                
   C                   EXCEPT        
   C                   END

のように記述していたはずである。
しかし現代的な記述としては、

として優れていないのである。
伝統的な RPG ソースに慣れている人であれば何故これがわかりにくいのかと不思議であろう。
しかしオープン系から RPG を学習するとこれらがRPGソースをわかりにくくしているのである。
そこで上記のLOOP文は次のように書き直すことができる。

  C                   READ      SHOHIN     
  C                   DOW       (NOT %EOF) 
  C                   EXCEPT    OUTPUT     
  C                   READ      SHOHIN     
  C                   ENDDO                

この LOOP文は READ 命令を重複して2回も使用しているが、このような LOOPの仕方が
オープン系では一般的である。C 言語, Java や VisualBASICを開発したことのある人であれば
逆にわかりやすいはずである。
オープン系の場合は無駄の排除よりも誰が見てもわかりやすいソース・コードこそが
大切なのである。
このRPGソースは標識を使わず、(NOT %EOF) の条件は直感的で非常にわかりやすいものと
なっている。
READ 命令に標識も割り当てられていないので桁位置を調べる必要もない。
ちょっとした修正だけで、いかにも最新のエレガントな LOOP文に見えてくるから
不思議なものである。

【サンプル : TESTLOOP】
---------------------------------------------------------------------------------
0001.00 H DFTNAME(TESTLOOP) DATEDIT(*YMD/)                                                 
0002.00 F**********  商品一覧表 ***********************************************            
0003.00 FSHOHIN    IF   E           K DISK                                                 
0004.00 FQPRINT    O    F  132        PRINTER OFLIND(*INOF)                                
0005.00 F                                     FORMLEN(66)                                  
0006.00 F                                     FORMOFL(62)                                  
0007.00 F*****************************************************************                 
0008.00 C                   READ      SHOHIN                                               
0009.00 C                   DOW       (NOT %EOF)                                           
0010.00 C                   EXCEPT    OUTPUT                                               
0011.00 C                   READ      SHOHIN                                               
0012.00 C                   ENDDO                                                          
0013.00 C                   EVAL      *INLR = *ON                                          
0014.00 OQPRINT    H    1P                     2 06                                        
0015.00 O         OR    OF                                                                 
0016.00 O                       UDATE         Y      8                                     
0017.00 O                                           14 ' 作成 '                            
0018.00 O                                           82 '* 商品マスター一覧表 *'            
0019.00 O                                          128 'PAGE.'                             
0020.00 O                       PAGE          Z    131                                     
0021.00 O          H    1P                     2                                           
0022.00 O         OR    OF                                                                 
0023.00 O                                           12 ' 商品コード '                      
0024.00 O                                           34 ' 商品名 '     
0025.00 O                                           68 ' 単価 '       
0026.00 O                                           80 ' 品種コード ' 
0027.00 O          E            OUTPUT         2                      
0028.00 O                       SHCODE              11                
0029.00 O                       SHNAME              46                
0030.00 O                       SHTANK        J     70                
0031.00 O                       SHSCOD              78                
---------------------------------------------------------------------------------