バージョン 6.3.3
 —  ファーストステップ  —

外部サブルーチン

これまでは、DEFINE SUBROUTINE ステートメントを使用して、サブルーチン MARK-SPECIAL-EMPLOYEES をプログラム内で定義していました。 この演習では、サブルーチンを別のオブジェクトとしてプログラムの外部に定義します。

以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。

Application structure

このドキュメントには次の演習が含まれています。


外部サブルーチンの作成

外部サブルーチンのコードを指定するエディタを起動します。

外部サブルーチンの DEFINE SUBROUTINE ステートメントは、プログラム内のインラインサブルーチンと同じ方法でコーディングします。

Start of instruction set外部サブルーチンを作成するには

  1. ライブラリワークスペースで、プログラムも含まれているライブラリ(TUTORIAL ノード)を選択します。

  2. コンテキストメニューから、[新規作成]>[サブルーチン]を選択します。

    空のエディタウィンドウが表示されます。

  3. 次のように入力します。

    DEFINE DATA
      GLOBAL USING GDA01
      LOCAL USING LDA01
    END-DEFINE
    *
    DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES
      MOVE '*' TO #MARK
    END-SUBROUTINE
    *
    END
    
  4. サブルーチンを格納します。

    [名前を付けて Stow]ダイアログボックスが表示されます。

  5. 外部サブルーチンの名前として「SUBR01」と入力し、[OK]ボタンを選択します。

    ライブラリワークスペースで、新しい外部サブルーチンが Subroutines ノードに表示されます。 論理ビューには、コード MARK-SPECIAL-EMPLOYEES で定義されたサブルーチンの名前が表示されます。 他のすべてのビューには、SUBR01 という名前が表示されます。

  6. 外部サブルーチンを入力したエディタウィンドウを閉じます。

Top of page

プログラムからの外部サブルーチンの参照

PERFORM ステートメントは、内部サブルーチンおよび外部サブルーチンの両方を呼び出します。 内部サブルーチンがプログラム内で見つからないと、Natural は同じ名前の外部サブルーチンを自動的に実行しようとします。 Natural では、サブルーチンコードで定義された名前(サブルーチン名)が検索され、サブルーチンの保存時に指定した名前(Natural オブジェクト名)が検索されるわけではありません。

外部サブルーチンの定義が完了したので、インラインサブルーチン(外部サブルーチンと同じ名前を持つ)をプログラムから削除する必要があります。

Start of instruction setプログラムで外部サブルーチンを使用するには

  1. プログラムエディタに戻ります。

  2. 次の行を削除します。

    DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES
      MOVE '*' TO #MARK
    END-SUBROUTINE
    

    プログラムは次のようになります。

    DEFINE DATA
      GLOBAL USING GDA01  
      LOCAL USING LDA01
    END-DEFINE
    *
    RP1. REPEAT
    *
      INPUT USING MAP 'MAP01'
    *
      IF #NAME-START = '.' THEN
        ESCAPE BOTTOM (RP1.)
      END-IF
    *
      IF #NAME-END = ' ' THEN
        MOVE #NAME-START TO #NAME-END
      END-IF
    *
      RD1. READ EMPLOYEES-VIEW BY NAME
        STARTING FROM #NAME-START
        ENDING AT #NAME-END
    *    
        IF LEAVE-DUE >= 20 THEN
          PERFORM MARK-SPECIAL-EMPLOYEES
        ELSE
          RESET #MARK
        END-IF
    *
        DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK
    
      END-READ
    *
      IF *COUNTER (RD1.) = 0 THEN
        REINPUT 'No employees meet your criteria.'
      END-IF
    *
    END-REPEAT
    *
    END
    
  3. プログラムを実行します。

  4. 開始名として「JONES」と入力し、Enter キーを押します。

    結果のリストには、20 日以上の休暇を取った各従業員にアスタリスクが引き続き表示されます。

  5. Esc キーを押して、出力ウィンドウを閉じます。

  6. プログラムを格納します。

次の演習「サブプログラム」に進みます。

Top of page