PR

【ABAP】EXIT命令/CONTINUE命令を3分でわかりやすく解説

ABAP

このページではループ処理の中で利用される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命令の基本と両者の違い、使い分けのコツをサンプルコードつきでわかりやすくご説明します。

このページで学べる内容
  • EXIT命令
    • 意味と使い方
    • 構文ルール
  • CONTINUE命令
    • 意味と使い方
    • 構文ルール
  • 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の違い

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命令のまとめ

  • EXITCONTINUEは、ABAPでループの制御を行うための命令です。
  • EXITは現在のループを終了し、制御をループの後の次の命令に移動。また、サブルーチンや汎用モジュールからも抜け出すために使われる。
  • CONTINUEは現在のループの繰り返しをスキップし、次の繰り返しに制御を移動する。

以下にEXITCONTINUE命令の使い方を説明するサンプルコードを記載しておきます。

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

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました