RPG

166. 標識を使用しない制御

先の「RPG のエラー・モニター(1)〜(3)」 で少し紹介したが、近年は標識を使用しない方向に移行しつつある。
米国紙の RPG ソース・コードのサンプルは、ほとんどフリー・フォーマットによる記述であり、しかも RPG 標識は
全くと言っていいほど使用されていない。その理由は、

他言語には標識という概念はないわけではなく、論理代数、つまり BOOL 値がこれに相当する。
他言語の場合は、標識という数字ではなく、

BOOL  m_bEBCDIC = FALSE;

というように m_bEBCDIC という TRUE または FALSE のどちらかの値をとる、BOOL 変数として「名前」 として
定義されているので、意味を把握しやすい。
さらに RPG の場合、結果の標識を定義する欄が 54桁目、56桁目, 58桁目と( 最近の RPGプログラマーは桁数は
覚えていないであろう ) と 3つの選択肢があるのでソース・コード上では判別しにくくなっている。
ここでは 標識を使用しない、組み込み関数の例をいくつか紹介する。

● CHAIN 命令

【 標識を使用した記述 】
--------------------------------------------------------------------------
C                   SETOFF                                       99
C     SHCODE        CHAIN     SHOHIN                             99
C   99              EXSR      NOT_FOUND
--------------------------------------------------------------------------
【 組み込み関数による記述 】
--------------------------------------------------------------------------
C     SHCODE        CHAIN     SHOHIN
C                   IF        NOT %FOUND
C                   EXSR      NOT_FOUND
C                   ENDIF
--------------------------------------------------------------------------

● READ 命令

【 標識を使用した記述 】
--------------------------------------------------------------------------
C                   SETOFF                                       50
C                   READ      SHOHIN                                 50
C   50              LEAVE
--------------------------------------------------------------------------
【 組み込み関数による記述 】
--------------------------------------------------------------------------
C                   READ      SHOHIN
C                   IF        %EOF
C                   LEAVE
C                   ENDIF
--------------------------------------------------------------------------

● SCAN 命令

【 標識を使用した記述 】
--------------------------------------------------------------------------
C     'DB2'         SCAN      STRING                                 50
C   50              EXSR      FOUND
--------------------------------------------------------------------------
【 組み込み関数による記述 】
--------------------------------------------------------------------------
C     'DB2'         SCAN      STRING
C                   IF        %FOUND
C                   EXSR      FOUND
C                   ENDIF
--------------------------------------------------------------------------