RPG

401. フリー・フォーマットでインデントを

フリー・フォーマットにする功罪はあるが
利点として最も優れているのはインデント(段落)して
記述できることである。

いくらRPGの伝統的な固定位置への記入に慣れたとしても
構造化プログラミングとして
IF-ELSE-ENDIF や DO-LOOP, SELECT-WHEN-ENDSLなどが
複雑に構造化してくると処理が見にくくなる。

構造化プログラミングがない時代はGOTO文で
TAGにジャンプするので固定式の技術で問題は
無かったが構造化プログラミングが普及してくると
このENDはどの命令のENDであるのか識別しにくくなってくる。

そこで単なるENDではなくENDIFやENDDOなど少しは
識別するようにしたのだが、それでも
構造化の階層が深くなると識別は困難なものとなる。

0194.00 C                   DO        *HIVAL                                       READ-LINE 
0195.00 C                   SETOFF                                       50                  
0196.00 C     LINEQL        READE     WRKSCS                                 50              
0197.00 C   50              LEAVE                                                            
0198.00  *( 罫線のセット )                                                                   
0199.00 C                   IF        %SUBST(DATA:1:4) = '*KSN'                     罫線     
0200.00 C                   EXSR      KEISEN                                                 
     :                       :                                                 
0204.00 C                   ELSE                                                    罫線     
0205.00  *( 一般固定情報のセット )                                                           
     :                       :                                 
0210.00 C                   ENDIF                                                   罫線     
0211.00 C                   ENDDO                                                  READ-LINE 

この例のように右端に始まりと終わりに同じコメントを入れるのも
ひとつの手段であるが複雑な構造化はやはり
フリー・フォーマットでインデントで表現したほうが圧倒的に
わかりやすくなる。

0378.00 C******************************************************                             
0379.00 C     UPDATE        BEGSR                                                           
0380.00 C******************************************************                             
0381.00  *( NO )                                                                            
0382.00 C     1             DO        *HIVAL        N                              DO-LOOP-N
0383.00  /FREE                                                                              
0385.00    IF GET_VALUE(CGIFLD:VALUE_P) = TRUE#;                                            
  :            :                                                           
0390.00       IF  GET_VALUE(CGIFLD:VALUE_P) = TRUE#;                                        
  :                :                          
0394.00       ELSE;                                                                         
  :                 :                                                   
0397.00       ENDIF;                                                                        
  :           :                                        
0400.00       IF  GET_VALUE(CGIFLD:VALUE_P) = TRUE#;                                        
  :                 :                         
0404.00       ELSE;                                                                         
  :                 :                                                  
0407.00       ENDIF;                                                                        
0408.00    ELSE;                                                                            
0409.00       LEAVE;                                                                        
0410.00    ENDIF;                                                                           
0411.00  /END-FREE                                                                          
0412.00 C                   ENDDO                                                  DO-LOOP-N
0413.00 C                   ENDSR                                                           

筆者はDO-*HIVALによるLOOPを好んで使っているがこれも
FOR-LOOP文にすれば完全なフリー・フォーマットの記述となる。

弊社のお客さまで若い開発者にはフリー・フォーマットの記述を勧めている会社が
あると聞いたがそれは良いことだと思う。
組込み関数やフリー・フォーマットを使うようにすると
RPGも本当に進化して使いやすく見やすくなったものだと感じる。
他の開発言語ではこれほどの進化は見られない。

今のところ進化の速度が速いのはRPGJavaScriptであろう。
これは開発に使われる機会が多いからだ。
Javaは自動車の電子制御、家電品の制御、スマートフォンのAppくらいで
WindowsのクライアントAppには全くJavaは衰退している。

自画自賛ではないがIBMも頑張ってRPGをよく進化させたものだと感じる。