!--a11y-->

サブルーチンは通常、ENDFORM 命令で終了します。ただし、EXIT 命令または CHECK 命令を使って早く終了することができます。EXIT または CHECK を使ってサブルーチンを終了すると、出力パラメータの現在の値 ( 値によって渡された CHANGING パラメータ) は対応する実パラメータに戻されます。
サブルーチンを無条件に終了させるには、EXIT を使用します。呼出元プログラムは、PERFORM 命令の後の命令でコントロールを取り戻します。

PROGRAM FORM_TEST.
PERFORM TERMINATE.
WRITE 'The End'.
FORM TERMINATE.
WRITE '1'.
WRITE '2'.
WRITE '3'.
EXIT.
WRITE '4'.
ENDFORM.
出力は以下のようになります。
1 2 3 The End
この例では、3 番めのWRITE 命令の後にサブルーチン TERMINATE が終了されます。
条件に従ってサブルーチンを終了させるには、CHECK を使用します。CHECK 命令の論理式が正しくない場合は、サブルーチンは終了され、呼出元プログラムは PERFORM 命令後にプロセスを再開します。

PROGRAM FORM_TEST.
DATA: NUM1 TYPE I,
NUM2
TYPE I,
RES TYPE P DECIMALS 2.
NUM1 = 3. NUM2 = 4.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
NUM1 = 5. NUM2 = 0.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
NUM1 = 2. NUM2 = 3.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
FORM DIVIDE USING N1 N2 CHANGING R.
CHECK N2 NE 0.
R = N1 / N2.
WRITE: /
N1, '/', N2, '=', R.
ENDFORM.
出力は以下のようになります。
3 / 4 = 0.75
2 / 3 = 0.67
この例では、N2 の値がゼロのため、CHECK 命令後の 2 番めの呼出中、サブルーチン DIVIDE は放置されます。
サブルーチンのループ内で EXIT 命令または CHECK 命令を使用すると、これらはサブルーチンではなくループに適用されます。EXIT と CHECK は異なる方法でループを終了させますが ( ループを参照) 、サブルーチンの終了時には同じように動作します。