RPG

250. フリー・フォーマットへの招待 (1)

先の DS (=Data Structure) での QUALIFIED の利用で紹介したように
複数の要素から成る変数を構造体として QUALIFIED 記述の DS で定義すると
扱いや考え方は統一できてわかりやすいものとなることは説明した。

ところで QUALIFIED つきの DS の要素を何らかの事情で判断分岐したいものとする。
要は QUALIFIED つきの DS で IF 文を書きたいのである。
このとき

APIERR.GETGYT    IFGT 0           

とは文法上、許されない。 正しくは

                 IF   APIERR.GETBYT  > 0         

である。
ここで AND や OR が必要となってくると 演算項目2以下がかなり長い記述となってしまい、
場合によっては書ききれないケースが発生する。
これは QUALIFIED を定義したから当然のことである。
そこで IF 以下を長く使いたいのであれば

/FREE
		   IF APIERR.GETBYT > 0;
		   ENDIF;
/END-FREE       

のようにフリー・フォーマットであれば左のほうに自由に記述することができるので
記述のスペースは格段と広く使えるようになる。
書きたくて書いたわけではないのだが QUALIFIED を使いだすと、
どうしてもフリー・フォーマットの記述になってしまう傾向にある。
ところでフリー・フォーマット も書き始めると結構見やすい。
特に算術演算は

/FREE
	 J = ROW - SFLTOP.ROW + 1;
/END-FREE     

のようにして算術演算をそのまま書くことができるのでわかりやすい。
さらに文字列の結合も

/FREE
    DAT = 'DSPF=' + %TRIMR(HTM_LIB) + '/' + %TRIMR(HTM_FILE) + 
      ',' + %TRIMR(HTM_RECORD) + NULL;                        
/END-FREE  

のようにして + 記号で結びつけるだけなので
CAT や MOVE に比べても読み取りやすくなっている。

プロシージャーの呼び出しはスマートであって

/FREE
	 CMD('OVRDSPF P5250FM TOFILE(ASNET.COM/P5250FMU) LVLCHK(*NO) -
		 OPNSCOPE(*JOB)');                                            
/END-FREE

というように CALLP や CALLB 命令は要らない。(明示的に書くこともできる。)

フリー・フォーマットの注意点は語尾に ; (セミコロン)をつけなければならないことだ。
しかしこれも COBOL の語尾の . (ビリオド)のように読み手が哲学的に悩むような語尾ではない。
むしろ ; (セミコロン) は C言語ぽくってなかなかカッコよいのかも知れない。

現在、筆者はRPGソースのまだ一部だけを、わかりやすくするためにフリー・フォーマットで書いている。
いきなりすべてをフリー・フォーマットにしたのでは読み手も混乱するからである。

これから少しずつフリー・フォーマットの良さを紹介していきたい