%SIZE とよく似た %ELEM は 配列の最大要素数を調べる組込み関数である。
%ELEM を効果的に使うことによって配列指標のエラーを予め予測して防ぐことができる。
%ELEM の実践的な使い方を紹介しよう。
■ 効果的な組込み関数 %ELEM の使い方の TESTELM
ソースはこちらから
0001.00 H DFTNAME(TESTELM) DATEDIT(*YMD/) BNDDIR('QC2LE')
0002.00 F********** 効果的な組込み関数 %ELEM の使い方 *************************
0003.00 F*
0004.00 F**********************************************************************
0005.00
0006.00 * CRTBNDRPG PGM(OBJLIB/TESTELM) SRCFILE(SRCLIB/QRPGLESRC) DFTACTGRP(*NO)
0007.00 * ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)
0008.00
0009.00 D DPR S 10 DIM(500) 小数
0010.00 D DP S 4S 0
0011.00
0012.00 D DS 1024
0013.00 D VALUE# 1 2
0014.00 D VALUE 1 1024
0015.00
0016.00 C ADD 1 DP
0017.00 C IF DP > %ELEM(DPR)
0018.00 C ' 配列オーバ 'DSPLY ANS 1
0019.00 C ENDIF
0020.00 /FREE
0021.00 DP += 1;
0022.00 IF DP > %ELEM(DPR);
0023.00 DSPLY ' 配列オーバー ' '' ANS;
0024.00 ENDIF;
0025.00 /END-FREE
0026.00 C SETON LR
0027.00 C RETURN
[解説]
配列に入れる指標 DP が配列 DPRの配列数をオーバーするようであれば
エラー・メッセージを表示するようにしている。
IF DP > 500 と記述するよりは
IF DP > %ELEM(DPR) と記述したほうが配列DPRの要素数と比較していることが
はるかにわかりやすい。
今まで説明してきたように組込み関数を使うとプログラムは読み手にとって
はるかにわかりやすいものとなる。
またプログラムの改変で配列DPRの配列数を拡張しても%ELEMは変更しなくてもよい。
プログラムの記述ははるかに汎用的なものになる。
運用していてもっもと発生しやすい障害は配列指標のエラーである。
実行中に配列指標のエラーが発生してどのプログラムのどの場所での発生か不明な場合は
解析やエラーの解く特定に時間がかかってしまう。
障害の発生を予め予測して対処できるようにしておくことこそエンド・ユーザーの信頼を得ることが
できるようになるというものである。
配列のオーバーを危惧するようなプログラムの場合 %ELEMは役に立つ組込み関数である。
