
ABAP のループは、複数回実行されるコードのブロックで定義されます。
最も単純な形式のループは、DO - ENDDO 命令で囲まれたコードブロックで構成されます。追加の手段がないと、これらの命令によって無限ループが確立される可能性があります。これは、以下のいずれかの方法で回避する必要があります。
- 指定されたループ数
- 整数式とそれに続くキーワード TIMES で DO 命令を拡張することで、コードブロックが処理される頻度を明示的に指定することができます。整数式は数値リテラルと同様に単純にできますが、算術計算も使用できます。式の値が 0 の場合、DO と ENDDO の間のコードブロックはまったく実行されず、プログラムは ENDDO の後のコードで即座に続行されます。
- 論理条件に基づくアボート
- EXIT 命令を使用すると、いつでもループを中止することができます。その後、プログラムは ENDDO の後にコードで続行されます。ループ EXIT の外側には異なる効果があることに注意してください。これにより、現在の処理ブロックの処理 (現在のメソッドなど) が強制終了されます。
通常、EXIT は IF と ENDIF で囲まれて、アボート条件に応じてループを終了します。アボート条件が true ではない場合、このようなループは無限ループに変わる可能性があることに注意してください。
もちろん、2 つの手法を組み合わせることができます。つまり、ループ数を明示的に指定してから、EXIT でループを終了します。したがって、ループ数は、実行時に到達しない可能性がある最大数になります。
DO と ENDDO の間のコードブロックでは、ABAP 組込データオブジェクト SY-INDEX への読込アクセスを実装することができます。この整数変数はループカウンタとして機能します。つまり、ABAP ランタイムでは、新しいループの開始時に変数が 1 つずつ増加します。
ABAP 組込変数 SY-TABIX は、ループにも同様の目的を果たすことができます。ただし、SY-TABIX は実際にはカウンタではありませんが、現在のループで処理されるテーブル行の位置を識別することに注意してください。