ABAPのCHECK命令について整理します。
CHECK命令は、一般的にはある条件を満たさない場合にループ処理を抜ける命令です。
ループの外でCHECK命令を行った場合には、現在の処理ブロックを終了します。(例えば、サブルーチンであれば、そのサブルーチンの処理を終了し、次のブロックに移ります。)
CHECK命令については、どういった場面で利用するのか?実際のコーディングはどのように行うのか?
この2点について、複数人から質問いただきましたので、超簡易的なサンプルコード付きで解説します。
このページでは、ループ処理についての知識が前提になります。参考に、ループ処理(DO/WHILE)についての記事を貼っておきます。
早速解説を始めます。
構文ルール:CHECK命令
CHECK (論理式).
(論理式)の部分は「SY-SUBRC = 0」のように比較演算子を用います。
構文ルールは簡単です。CHECKの後に、論理式を指定するだけです。
CHECK (論理式) AND (論理式).
のように、条件を複数指定することもできます。
構文自体は簡単ですので、CHECK命令の処理の内容をしっかり押さえましょう。
CHECK命令の処理
ループ処理の中に記載したCHECK命令では、
CHECK (論理式).
の中の(論理式)が「偽」の場合にループ処理を抜ける処理を行います。
つまり、CHECK命令は「~であること」をチェックし、「~でない」場合に処理をやめたい場合に用います。
早速ですが、以下のサンプルコードでイメージを深めましょう。
サンプルコード:CHECK命令
以下のコードは、システム項目「SY-SUBRC」が0以外の場合にループ処理を終了します。
DO 100 TlMES.
A = A + 1.
CHECK SY-SUBRC = 0.
WRTE / SY-INDEX.
ENDOO.
CHECK命令が、ループ処理の中に書かれています。
したがって、SY-SUBRCが0以外となった場合には、ループ処理を抜けることになります。
注意点としては、CHECK命令は「~であること」をチェックする命令ですので「CHECK SY-SUBRC <> 0.」ではなく「CHECK SY-SUBRC =0.」と記述します。
※SY-SUBRCとは何か?気になった方はこちら。
ループ処理の「強制終了」
CHECK命令の他にも、ループ処理を終了する処理を行う命令があります。
ループ処理の「強制終了」を行うEXIT命令・CONTINUE命令もこちらのページで解説しておりますので、合わせて参照いただくことをお勧めします。