このページではループ処理の中で利用されるEXIT命令とCONTINUE命令について解説します。
参考 LOOP処理とは?
EXIT
はループを強制終了し制御をループの次の命令に移動する命令。CONTINUE
は、ループ内の現在の繰り返しをスキップし、次の繰り返しに直接移動するために使用される命令です。
DATA: BEGIN OF itab OCCURS 0, number TYPE i, END OF itab. DO 10 TIMES. " 10回繰り返す itab-number = sy-index. APPEND itab. ENDDO. LOOP AT itab. IF itab-number > 5. " 数値が5より大きい場合 EXIT. " ループを終了する ENDIF. IF itab-number MOD 2 = 0. " 数値が偶数の場合 CONTINUE. " 現在のループの繰り返しをスキップする ENDIF. WRITE: / '数値は:', itab-number. " 数値を出力 ENDLOOP. " 出力結果: " 数値は: 1 " 数値は: 3 " 数値は: 5
このページではEXIT命令とCONTINUE命令の基本と両者の違い、使い分けのコツをサンプルコードつきでわかりやすくご説明します。
SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしい基本知識ばかりです。是非最後までご覧ください。
参考 ABAPの基本構文ルール
ABAP:EXIT命令
EXIT
はループを終了し、制御をループの次の命令に移動するために利用されます。
これは主に、一定の条件が満たされたときにループを終了するために使用されます。
以下に、EXIT命令を利用した簡単なサンプルコードです。
DATA: BEGIN OF itab OCCURS 0, number TYPE i, END OF itab. DO 10 TIMES. itab-number = sy-index. APPEND itab. ENDDO. LOOP AT itab. WRITE: / 'Number is:', itab-number. IF itab-number > 5. EXIT. " 5 より大きくなったらループを抜ける ENDIF. ENDLOOP. " 出力結果: " Number is: 1 " Number is: 2 " Number is: 3 " Number is: 4 " Number is: 5
参考 DATA / DO~ENDDO / APPEND / WRITE / IF
このコードでは、内部テーブルitab
に対してループ処理を実行し、それぞれの要素を出力します。その際、要素の値が5より大きい場合、EXIT
命令が実行されループが終了するという仕組み。
結果、このコードは1から5までの数字を出力します。
EXIT命令は、その命令が実行されると無条件にループ処理を抜けるという点を押さえておきましょう。
EXIT命令は、LOOP命令だけではなく、DOループ・WHILEループの中でも勿論利用することが可能です。
DATA: number TYPE i VALUE 0. DO. ADD 1 TO number. WRITE: / 'Number is:', number. IF number >= 5. EXIT. " If number is greater or equal to 5, exit from the loop ENDIF. ENDDO. " 結果 " Number is: 1 " Number is: 2 " Number is: 3 " Number is: 4 " Number is: 5
ABAP:CONTINUE命令
CONTINUE
命令は、ループ内の現在の繰り返しをスキップし、次の繰り返しに直接移動するために使用されます。
EXIT命令
⇒ループ全体を抜ける
CONTINUE命令
⇒処理中のレコードを抜ける(次のレコード処理に移る)
以下に、その使い方を示すサンプルコードを示します。
DATA: BEGIN OF itab OCCURS 0, number TYPE i, END OF itab. DO 10 TIMES. itab-number = sy-index. APPEND itab. ENDDO. LOOP AT itab. IF itab-number MOD 2 = 0. " 偶数の際は現在の処理をスキップする CONTINUE. ENDIF. WRITE: / 'Number is:', itab-number. ENDLOOP. " 出力結果 " Number is: 1 " Number is: 3 " Number is: 5 " Number is: 7 " Number is: 9
CONTINUEは日本語で、"続ける" "続く" 等の意味を持つ通り、処理中のレコードの処理を抜けて「次のループ処理に進む」という意味になります。
↑のコードでは、内部テーブルitab
のすべての要素に対してループ処理を実行しますが、要素の値が偶数である場合、CONTINUE
命令が実行され、その繰り返しはスキップされます。
結果、このコードは奇数のみを出力します。
EXIT命令が、ループ全体を抜ける命令であるのに対して、CONTINUE命令はループ中の当該レコードの処理を抜けるという意味になるのに注意しましょう。
CONTINUE命令もEXIT命令と同様に、DOループやWHILEループでも同じように利用することが可能です。
DATA: number TYPE i VALUE 0. DO 10 TIMES. ADD 1 TO number. IF number MOD 2 = 0. " If number is even, skip the loop iteration CONTINUE. ENDIF. WRITE: / 'Number is:', number. ENDDO. " 出力結果 " Number is: 1 " Number is: 3 " Number is: 5 " Number is: 7 " Number is: 9
EXIT命令とCONTINUE命令の違い:ループ外での利用
EXIT
命令とCONTINUE
命令は主にループ内で利用されますが、ループ外での動作に重要な違いがあります。
以下にポイントを整理します。
以下のサンプルプログラムでは、my_form
サブルーチン内でnumber
が5に達した時点でEXIT
命令が実行され、サブルーチンから抜け出すことを示しています。
DATA: number TYPE i VALUE 0. FORM my_form. DO 10 TIMES. ADD 1 TO number. WRITE: / 'Number is:', number. IF number = 5. EXIT. " 数値が 5 に等しい場合サブルーチンを終了 ENDIF. ENDDO. WRITE: / 'This message will not be displayed if number is equal to or greater than 5'. ENDFORM. START-OF-SELECTION. PERFORM my_form. " 出力結果 " Number is: 1 " Number is: 2 " Number is: 3 " Number is: 4 " Number is: 5
'This message will not be displayed if number is equal to or greater than 5'
というメッセージは表示されません。これは、number
が5に達した時点でEXIT
が実行され、制御がサブルーチンから抜け出してしまうからです。このように、EXIT
命令はモジュール内から即座に抜け出すためにも使用されます。
ループを抜ける処理を行いたい場合は、EXIT命令、CONTINUE命令、そしてCHECK命令のいずれかを適切に選択して利用することが大切です。
EXIT命令/CONTINUE命令のまとめ
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!