CL

113. CLPのパラメータの注意(3)

最後にRPGに渡すパラメータについて
解説する。

IBM i でRPGにパラメータを渡してそのパラメータ値をRPG内で書き換えると
RPGを呼び出したCLPにも書き換えられた値が戻る。
IBM iの長い開発経験を持つ開発者からするとこれは当たり前ではないかと
思われるが一般的なコンピュータ言語から言えば当たり前ではない。
他の開発言語ではパラメータを渡す側(呼び出し側)のプログラムと
呼び出される側(受取り側)ではパラメータも別々の変数として
管理されているので呼び出された側でいくらパラメータ値を
変更しても戻り値のパラメータには変化がない。
唯一、パラメータ値が変わるのはパラメータの属性がポインタである
場合だけである。
ポインタをパラメータとして渡したのであれば受取り側も渡すほうも
同じ変数を指し示しているので受取り側でそのパラメータ値を
変更すれば戻ったときにもその値は変更されている。

ところが CLP でRPGに渡すパラメータ値はつねに戻り値も変更されている
ということは RPGに渡しているパラメータとはポインタを渡していることに
なる。
経験豊かなIBM iの開発者であればこのことを意識して頂ければ
パラメータの受け渡しに深い理解を行うことができる。
例えば


    渡す側のパラメータのタイプと受取り側のパラメータのタイプが
    異なっていても構わない。

これは受け渡しがポインタによって行われていると思えば
何の問題もないことが理解できる。
双方のパラメータの長ささえ一致していればよいのだ。

参考までに CLP では変数を &VALUE (赤字)のように先頭に文字 & (赤字)を
つけて表すのだがこれは C言語では変数 VALUEのポインタを表している。
IBM もポインタの意識があってこのような命名をしたのだと
推測できる。