RPG

389. CHAIN や LOOKUPの結果を示す %FOUND

オープン系の開発から初めてRPGの開発に来た人が最初に戸惑うのが
標識の存在である。
オープン系の言語でも論理値を示すBOOL変数は用意されているので
それと同じことではあるのだが標識が 01~99 の数字で用意されているのが
どうもわかりにくいようである。

そこで標識をなるべく使わないようにするひとつの方法が
%FOUND を使用することである。

%FOUNDCHAINやREAD, READE, REAP, LOOKUPの結果を判断することができる関数である。

[標識によるCHAINの結果の判断]

0022.00 C                   SETOFF                                       90          
0023.00 C     PRTKEY        CHAIN     TESTCHN                            90          
0024.00 C*-------------------------------------------------------------------------- 
0025.00 C   90              WRITE     DSPPRTR                                      | 
0026.00 C*-------------------------------------------------------------------------- 

[解説]

これは従来の古典的な標識によるCHAINの結果を判断してレコードを追加している例である。
慣れている人は良いがまだRPGに標識に慣れていない人にとっては

1. 標識90が書かれている位置を判断しなければならない。

2. 標識の位置に対する意味を覚えておいて判断しなければならない。

慣れている人にとっては造作もない話なのだが標識に馴染みのない人にとっては
標識の位置と意味の2つの判断を必要とする。
これを新しく記述するときはこれらの2つを正確に覚えておかねばならない。

次に %FOUND を使うと上記の記述は次のように書き換えられる。

[ %FOUND によるCHAIN結果の判断]

0022.00 C     PRTKEY        CHAIN     TESTCHN                                                
0023.00 C                   IF        NOT %FOUND                                   NOT-FOUND 
0024.00 C*--------------------------------------------------------------------------         
0025.00 C                   WRITE     DSPPRTR                                      |         
0026.00 C*--------------------------------------------------------------------------         
0027.00 C                   ENDIF                                                  NOT-FOUND 

[解説]

ステップ数は増えるのだが IF NOT %FOUND という記述によってRPGを見るのが
初めての人であってもこの演算の内容が想像することができる。
( %NOTFOUND という組込み関数はない)
つまりわかりやすい、理解しやすいということになる。

IBMマニュアルには LOOKUP にも %FOUNDが使えるとあるが残念ながら
標識を定義していないと SEU のエラーになってしまう。