パラメーターの受け渡しスタイルの選択

既存のプログラムまたはプロシージャーを呼び出す場合は、参照による 方法または値による方法のいずれかの、プロシージャーが予期する方法でパラメ ーターを渡す必要があります。 パラメーターを参照により渡す必要があり、呼び出されたプロシージャー・プログラムまたはプロシージャーによって パラメーターが変更されない場合は、読み取り専用の参照によって渡します (CONST キーワードを使用)。 値による受け渡しまたは読み取り専用参照による受け渡しを自由に選択できる場合、 大量のパラメーターがある場合は読み取り専用の参照によって渡します。 次の一般的なガイドラインに従ってください。
  • パラメーターが数値またはポインターであり、配列ではない場合は、 読み取り専用の参照、または値により渡します。 これらのデータ・タイプを値により渡した場合、ごくわずかにパフォーマンスが向上します。
  • それが不要の場合は、読み取り専用の参照により渡します。
図 1. VALUE パラメーターのプロシージャー DO_CALC のプロトタイプ
      *-------------------------------------------------------------
      *  プロシージャーは 10 桁の整数値を戻します。
      *  3 つのパラメーターはすべて、VALUE で渡された 5 桁の整数です。
      *-------------------------------------------------------------
     D MyFunc          PR            10I 0 EXTPROC('DO_CALC')
     D                                5I 0 VALUE
     D                                5I 0 VALUE
     D                                5I 0 VALUE
     ....
図 2. DO_CALC プロシージャーのプロシージャー・インターフェース定義
     P DO_CALC         B                   EXPORT
      *-------------------------------------------------------------
      * このプロシージャーは、VALUE パラメーターとして渡された
      * 3 つの数値で機能を実行し、また値を戻します。
      *-------------------------------------------------------------
     D DO_CALC         PI            10I 0
     D    Term1                       5I 0 VALUE
     D    Term2                       5I 0 VALUE
     D    Term3                       5I 0 VALUE
     D Result          S             10I 0
     C                   EVAL      Result = Term1 ** 2 * 17
     C                                    + Term2      * 7
     C                                    + Term3
     C                   RETURN    Result * 45 + 23
     P                 E
図 3. CONST パラメーターの ILE CEE API CEETSTA のプロトタイプ
      *------------------------------------------------------------------
      * CEETSTA (省略引数のテスト) -- ILE CEE API
      *     1. 存在フラグ                          出力   2 進 (4)
      *     2. 引数番号                            入力   2 進 (4)
      *------------------------------------------------------------------
     D CEETSTA         PR                    EXTPROC('CEETSTA')
     D   Present                     10I 0
     D   ArgNum                      10I 0   CONST
     D   Feedback                    12A     OPTIONS(*OMIT)
     ...
     D HaveParm        S             10I 0
     ...
     C                     CALLP    CEETSTA(HaveParm : 3 : *OMIT)
     C                     IF       HaveParm = 1
      *        3 番目のパラメーターで何かを行なう
     C                     ENDIF

CEETSTA に渡される 2 番目のパラメーターは数字フィールド、 リテラル、組み込み関数、または式とすることができます。