RPG

205. RPGソース の近代化 (5)

■ ENDxx を使い分ける !

固定記述の RPG ソースに対するオープン系技術者の抵抗感は
演算命令などが同じ位置に記述されているので、構造化された表示にはならず
読みにくいというものである。
とりわけインデント化されていない演算命令の組み合わせは END 命令が
重なると、どの END がどの IFDO に対応しているのかを判別が
困難となり、解析に困ることは珍しくない。
フリー・フォーマットの RPG ソースを記述すれば、この問題は解決するのだが
その前にでも END の使用を止めて ENDxx に変更するだけで
かなりわかりやすいソースとなる。

[ END だけの記述によるソース ]

0001.00 C     1             DO        100           N                 4 0
0002.00 C                   SELECT
0003.00 C                   WHEN      OPT = 'NXT'
0004.00 C     SHCODE        SETGT     SHOHIN
0005.00 C                   READ      SHOHIN                                 50
0006.00 C                   WHEN      OPT = 'PRV'
0007.00 C     SHCODE        SETLL     SHOHIN
0008.00 C                   READP     SHOHIN                                 50
0009.00 C     N             IFGT      *ZEROS
0010.00 C     N             SUBST     RESULT:16     SHCODE
0011.00 C                   ELSE
0012.00 C                   MOVE      *BLANKS       SHCODE
0013.00 C                   END
0014.00 C                   END
0015.00 C                   END

これを IF - ENDIF, DO - ENDDO, SELECT - ENDCL に変更すると次のようになる。

[ ENDxx による記述のソース ]

0001.00 C     1             DO        100           N
0002.00 C                   SELECT
0003.00 C                   WHEN      OPT = 'NXT'
0004.00 C     SHCODE        SETGT     SHOHIN
0005.00 C                   READ      SHOHIN
0006.00 C                   WHEN      OPT = 'PRV'
0007.00 C     SHCODE        SETLL     SHOHIN
0008.00 C                   READP     SHOHIN
0009.00 C                   IF        N > 0
0010.00 C                   EVAL      SHCODE = %SUBST(RESULT:16:N)
0011.00 C                   ELSE
0012.00 C                   CLEAR                   SHCODE
0013.00 C                   ENDIF
0014.00 C                   ENDSL
0015.00 C                   ENDDO

ENDIF, ENDSL, ENDDO によって記述されているので、どの IF, SELECT, DO
対応しているのかがわかりやすい。
固定記述であっても、ある程度の構造化を図ることができるのである。