4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ILERPGAdvent Calendar 2023

Day 18

CLで引数を省略する方法2(モダン

Last updated at Posted at 2023-12-17

前回の「 CLで引数を省略する方法1(レガシー 」に続いて、今回はCLで引数を省略するモダンな方法「%PARMS」組み込み関数を使う方法。
V7R4 新機能 に掲載されているので、まぁそろそろ使えるユーザーさんもチラホラ出てきています。特に Power8 が終焉に向けているので、V7R5 が浸透しやすい状況ではあります。
レガシーな方法は、QCPFMSG.MCH3601(参照された位置のポインターが設定されていない ) をモニターするのですが、ジョブログも残るし、こちらの方がソースコードの見た目もかなりスマートであること、ILE-RPG の
%PARMS (パラメーター数の戻り)
ともコーディングに一貫性があり良いのではないでしょうか?皆さん、未来の若者のためにリファクタリングしましょ!

実装イメージ

渡された引数の数は、%PARMS 関数を通して知ることが出来るため、内部変数に省略値を設定後、渡された引数の値で置換する。

省略の可能性がある引数は、プログラム内のワーク変数を用意する必要があるのは前回と同じ。後続の処理はこちらを使用して処理を続ける。

コードサンプル抜粋

       PGM  PARM(          +
                &P@VAR1    +
                &P@VAR2    +
           )

      /*======================================*/
      /*‚引数定義                          €*/
      /*======================================*/
      /*‚入力€*/
       DCL VAR(&P@VAR1   ) TYPE(*CHAR) LEN(016  )     /*IN引数1            */
       DCL VAR(&P@VAR2   ) TYPE(*CHAR) LEN(016  )     /*IN引数2            */

↓↓↓↓↓↓↓↓ 省略される可能性がある引数のワーク変数 ↓↓↓↓↓↓↓↓
      /*======================================*/
      /*‚変数定義                        €*/
      /*======================================*/
       DCL VAR(&W@VAR1   ) TYPE(*CHAR) LEN(016  )     /*WK引数1            */
       DCL VAR(&W@VAR2   ) TYPE(*CHAR) LEN(016  )     /*WK引数2            */

~~~~~~~~~~~~~~~~~~~~~~~~~

   SUBR       @INPARM

      /*‚省略値を設定€*/
       CHGVAR VAR(&W@VAR1 ) VALUE('省略1')
       CHGVAR VAR(&W@VAR2 ) VALUE('省略2')
       
↓↓↓↓↓↓↓↓ 関数で渡された引数の数を知ることが出来る ↓↓↓↓↓↓↓↓
      /*‚引数1が渡されている時に変数にセット€*/
       IF (%PARMS *GE 1) THEN(DO)
          CHGVAR   VAR(&W@VAR1   ) VALUE(&P@VAR1      )
       ENDDO

      /*‚引数2が渡されている時に変数にセット€*/
       IF (%PARMS *GE 2) THEN(DO)
          CHGVAR   VAR(&W@VAR2   ) VALUE(&P@VAR2      )
       ENDDO

結果

CALL Q231218C1CALL Q231218C1 PARM('私は' 'RPGer') の実行結果は以下の通り。

2023-12-05_202515.png

ノイズになるメッセージも出力されないし、コードの可読性も良いので、これからは積極的に使いたいですな。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?