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
--------------------------------------------------------------------------