ABAP 判断

ABAP 判断

ℹ️概述
决策结构具有要由程序评估或测试的一个或多个条件,以及如果条件被确定为真则要执行的一个或多个语句,以及可选地,如果条件被确定为假。

📐 判断结构流程



graph TD
    A[开始判断] --> B{条件评估}
    B -->|条件为真| C[执行真分支]
    B -->|条件为假| D[执行假分支]
    C --> E[结束判断]
    D --> E
    E --> F[继续执行]


🎯 ABAP判断语句类型

ABAP编程语言提供以下类型的决策语句:

序号 语句类型 描述
1 IF语句 IF语句由逻辑表达式后跟一个或多个语句组成。
2 IF..ELSE语句 IF语句后面可以是一个可选的ELSE语句,当表达式为false时执行。
3 嵌套IF语句 你可以在另一个IF或ELSEIF语句中使用一个IF或ELSEIF语句。
4 CASE控制语句 当我们需要比较两个或多个字段或变量时,使用CASE语句。

🔧 IF语句

基本语法

1
2
3
IF <condition>.
" 条件为真时执行的代码
ENDIF.

示例

1
2
3
4
5
DATA: lv_age TYPE I VALUE 25.

IF lv_age >= 18.
WRITE: / '成年人'.
ENDIF.

🔀 IF..ELSE语句

基本语法

1
2
3
4
5
IF <condition>.
" 条件为真时执行的代码
ELSE.
" 条件为假时执行的代码
ENDIF.

示例

1
2
3
4
5
6
7
DATA: lv_score TYPE I VALUE 75.

IF lv_score >= 60.
WRITE: / '及格'.
ELSE.
WRITE: / '不及格'.
ENDIF.

🏗️ 嵌套IF语句

基本语法

1
2
3
4
5
6
7
8
9
10
IF <condition1>.
" 条件1为真时执行的代码
IF <condition2>.
" 条件1和条件2都为真时执行的代码
ENDIF.
ELSEIF <condition3>.
" 条件1为假且条件3为真时执行的代码
ELSE.
" 所有条件都为假时执行的代码
ENDIF.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
DATA: 
lv_age TYPE I VALUE 25,
lv_status TYPE C.

IF lv_age < 18.
lv_status = '未成年'.
ELSEIF lv_age >= 18 AND lv_age < 65.
lv_status = '成年'.
ELSE.
lv_status = '老年'.
ENDIF.

WRITE: / '状态:', lv_status.

🎭 CASE语句

基本语法

1
2
3
4
5
6
7
8
CASE <variable>.
WHEN <value1>.
" 变量等于value1时执行的代码
WHEN <value2>.
" 变量等于value2时执行的代码
WHEN OTHERS.
" 变量不等于任何指定值时执行的代码
ENDCASE.

示例

1
2
3
4
5
6
7
8
9
10
11
12
DATA: lv_grade TYPE CHAR1 VALUE 'B'.

CASE lv_grade.
WHEN 'A'.
WRITE: / '优秀'.
WHEN 'B'.
WRITE: / '良好'.
WHEN 'C'.
WRITE: / '及格'.
WHEN OTHERS.
WRITE: / '不及格'.
ENDCASE.

🔍 条件表达式

比较运算符

运算符 描述 替代形式
= 等于 EQ
<> 不等于 NE
> 大于 GT
< 小于 LT
>= 大于等于 GE
<= 小于等于 LE

逻辑运算符

运算符 描述 示例
AND 逻辑与 condition1 AND condition2
OR 逻辑或 condition1 OR condition2
NOT 逻辑非 NOT condition

示例

1
2
3
4
5
6
7
8
9
10
11
DATA: 
lv_age TYPE I VALUE 25,
lv_score TYPE I VALUE 80.

IF lv_age >= 18 AND lv_score >= 60.
WRITE: / '条件满足'.
ELSEIF lv_age < 18 OR lv_score < 60.
WRITE: / '条件不满足'.
ELSE.
WRITE: / '其他情况'.
ENDIF.

💡 判断语句选择指南

何时使用IF语句



graph LR
    A[选择判断语句] --> B{简单条件判断}
    B -->|是| C[使用IF语句]
    B -->|否| D{多值比较?}
    D -->|是| E[使用CASE语句]
    D -->|否| F{复杂条件组合?}
    F -->|是| G[使用嵌套IF]
    F -->|否| H[使用简单IF]

使用场景对比

语句类型 适用场景 优点 缺点
IF 简单条件判断 灵活 条件多时复杂
IF-ELSE 二选一判断 清晰 只能两个分支
嵌套IF 多重条件判断 功能强大 可读性差
CASE 多值比较 简洁直观 只能单值比较

⚠️ 注意事项

1. 条件顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
" ❌ 错误:顺序导致逻辑错误
IF lv_score >= 90.
WRITE: / '优秀'.
ELSEIF lv_score >= 80.
WRITE: / '良好'.
ELSEIF lv_score >= 70.
WRITE: / '一般'.
ELSE.
WRITE: / '不及格'.
ENDIF.

" ✅ 正确:顺序正确
IF lv_score >= 90.
WRITE: / '优秀'.
ELSEIF lv_score >= 80.
WRITE: / '良好'.
ELSEIF lv_score >= 70.
WRITE: / '一般'.
ELSEIF lv_score >= 60.
WRITE: / '及格'.
ELSE.
WRITE: / '不及格'.
ENDIF.

2. 条件覆盖

确保所有可能的情况都被覆盖:

1
2
3
4
5
6
7
8
9
10
11
12
13
" ✅ 完整的条件覆盖
DATA: lv_status TYPE C VALUE 'X'.

CASE lv_status.
WHEN 'A'.
WRITE: / '状态A'.
WHEN 'B'.
WRITE: / '状态B'.
WHEN 'C'.
WRITE: / '状态C'.
WHEN OTHERS.
WRITE: / '未知状态'.
ENDCASE.

3. 可读性

  • 使用有意义的变量名
  • 添加注释说明复杂逻辑
  • 避免过深的嵌套

💡 最佳实践

1. 代码设计原则

  • 使用最简单的判断结构满足需求
  • 保持条件逻辑清晰易懂
  • 避免过深的嵌套层次

2. 条件编写

  • 使用有意义的变量名
  • 避免复杂的条件表达式
  • 考虑条件的可读性

3. 错误处理

  • 使用OTHERS子句处理未知情况
  • 添加适当的错误处理逻辑
  • 考虑边界条件

4. 性能考虑

  • 将最可能的条件放在前面
  • 避免重复计算
  • 注意条件判断的执行顺序