オープン系の開発から初めてRPGの開発に来た人が最初に戸惑うのが
標識の存在である。
オープン系の言語でも論理値を示すBOOL変数は用意されているので
それと同じことではあるのだが標識が 01~99 の数字で用意されているのが
どうもわかりにくいようである。
そこで標識をなるべく使わないようにするひとつの方法が
%FOUND を使用することである。
%FOUND はCHAINや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 のエラーになってしまう。