09.[SAP ABAP] 终止循环
文章目录
- [09.[SAP ABAP] 终止循环](#09.[SAP ABAP] 终止循环)
-
- [一. EXIT](#一. EXIT)
- [二. CONTINUE](#二. CONTINUE)
- [三. CHECK](#三. CHECK)
-
- [1. 事件块中](#1. 事件块中)
- [2. 子程序或方法中](#2. 子程序或方法中)
- [3. 在循环中(常用于过滤)](#3. 在循环中(常用于过滤))
- [四. 总结](#四. 总结)
在 ABAP 中,循环语句的终止主要通过以下几种方式实现,具体取决于你使用的循环类型( DO、 WHILE、 LOOP AT)以及业务逻辑需求。
终止循环语句可以使用以下3个关键字:
| 关键字 | 功能描述 |
|---|---|
| EXIT | 完全跳出循环 |
| CONTINUE | 无条件的终止当前循环并进行下一次循环 |
| CHECK | 有条件的终止当前循环并进行下一次循环 |
一. EXIT
如果循环语句中存在EXIT,当执行到EXIT时,将终止之后的所有循环 。
- 作用: 跳出最内层的循环(DO/WHILE/LOOP AT) , 继续执行循环之后的代码。
- 相当于其他语言中的
break.
ABAP
DO 10 TIMES.
IF sy-index > 5.
EXIT. " 循环到第6次时退出
ENDIF.
WRITE: / sy-index.
ENDDO.
在嵌套循环中,
EXIT只退出当前所在的循环层。
二. CONTINUE
- **作用:**不终止整个循环,但跳过当前循环体中剩余语句,直接开始下一次迭代。
- 相当于其他语言中的
continue。
ABAP
DO 5 TIMES.
IF sy-index = 3.
CONTINUE. " 跳过第3次
ENDIF.
WRITE: / sy-index.
ENDDO.
三. CHECK
CHECK 是一个非常常用且强大的流程控制语句 ,用于条件判断和提前退出当前处理块(如事件块、子程序、循环体等)。
- 条件为
真(TRUE):继续执行后续代码。 - 条件为
假(FALSE):直接退出当前上下文
1. 事件块中
ABAP
START-OF-SELECTION.
CHECK sy-subrc = 0. " 如果前面 SELECT 失败(sy-subrc ≠ 0),则不继续
WRITE: / 'Processing data...'.
2. 子程序或方法中
ABAP
FORM validate_input.
CHECK input IS NOT INITIAL.
WRITE: / 'Input is valid'.
" ... 其他处理
ENDFORM.
3. 在循环中(常用于过滤)
ABAP
LOOP AT it_spfli INTO wa_spfli.
CHECK wa_spfli-carrid = 'LH'. " 只处理 LH 航空公司
WRITE: / wa_spfli-connid.
ENDLOOP.
四. 总结
| 场景 | 推荐写法 | 说明 |
|---|---|---|
| 循环中跳过不符合条件的行 | CHECK condition. | 更简洁,可读性高 |
| 需要复杂逻辑(如 ELSE 分支) | IF ... ENDIF. | CHECK不支持ELSE |
| 退出整个子程序 | CHECK condition.或IF NOT condition. RETURN. ENDIF. |
两者等效 |
| 仅退出循环 | 不要用 CHECK(它不会退出整个循环,只会跳过当前轮次) |
此时用 EXIT |