フリー・フォーマットにする功罪はあるが
利点として最も優れているのはインデント(段落)して
記述できることである。
いくら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も本当に進化して使いやすく見やすくなったものだと感じる。
他の開発言語ではこれほどの進化は見られない。
今のところ進化の速度が速いのはRPGとJavaScriptであろう。
これは開発に使われる機会が多いからだ。
Javaは自動車の電子制御、家電品の制御、スマートフォンのAppくらいで
WindowsのクライアントAppには全くJavaは衰退している。
自画自賛ではないがIBMも頑張ってRPGをよく進化させたものだと感じる。