科莱特教育

 找回密码
 立即注册
查看: 3558|回复: 0

ABAP 控制语句

[复制链接]

11

主题

11

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2020-12-31 08:11:26 | 显示全部楼层 |阅读模式
ABAP 开发系列(06): ABAP 控制语句3. 控制语句
ABAP语言的掌握到一定程序后,会处理一些复杂的内容,而SAP的数据流控制中,更有很多复杂的逻辑操作。
这时候需要一些手段来管理和组织这些项目,ABAP的分支结构,如 if,case;循环操作,如 Do,While 等。
以便程序按照所需要的逻辑处理相应的任务。

3.1 IF语句
先看下 IF 语句的例子:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em][size=1em]DATA:  X  TYPE I VALUE 5.

[size=1em]IF X =5.
[size=1em]   
[size=1em]  WRITE :/ ‘The value of X is 5’.

[size=1em]ELSE.

[size=1em]  WRITE :/ ‘The value of X is no 5’.

[size=1em]ENDIF.




在定义变量 X 时,将其默认值设为 5。
IF 语句中,进行判断,当 X = 5 时,为真(True),则输出 X 的值为 5;
如若把 X 的改成其他值,判断的结果为假 (False),所以执行 ELSE 中的语句,输出 X 的值不为 5。

IF 语句被称为分支结构选择语句,因为它提供了一个交汇点,可以选择两个分支中的一个。
IF 语句的通用形式:
IF <表达式>.
语句1 …
ELSE.
语句2 …
ENDIF.
如果表达式为真 (True),则执行语句1, 如果为假 (False),则执行语句2.

如若出现两个选择以上时,可以使用嵌套的 IF语句:
IF  <表达式1>.
语句1 …
ELSEIF <表达式2>.
语句2 …
ELSE.
语句3 …
ENDIF.

其中,ELSEIF多重选择语句,用于适应不同的分支选择。

3.2 逻辑表达式
在 IF语句中,重点在于 if 中的判断,也就是表达式的操作。
而逻辑表达式,主要由以下几类组成:
1.关系操作符
2.逻辑操作符

3.2.1 关系操作符
ABAP中的关系运算符如下所示:
描 述语 法
等于(Is Equal to)=, EQ
不等于(Is not equal to)<>, ><, NE
大于(Greater than) >, GT
大于等于(Greater than or equal to)>=, => , GE
小于(Less than) <, LT
小于等于(Less than or equal to)<=, =<, LE
其中,字符 EQ、GT 等也可作为关系运算操作。

3.2.2 逻辑操作符
逻辑操作符只有 ANDOR 两种。
AND: 和/并 操作
OR: 或 操作

3.2.3 操作符优先级
在条件判断时,往往关系操作符和逻辑操作符会组合在一起,这时就会存在有优先级的处理。
逻辑操作符的优先级低于关系操作符,逻辑操作符中 AND 的优先级要比OR的高,而这两者的优先级都比赋值运算的高。
比如:
a > b AND c < d  OR b > d
可以看成:
( ( a > b )  AND ( c < d)  ) OR ( b > d )

3.3  多重选择:CASE 语句
使用条件运算符和if语句可以很快编写从两个选择中进行选择的程序。
但当出现多个选择的时候,可以通过 IF … ELSEIF … ELSE… ENDIF. 语句来完成。
如若出现3种或3种以上选择时,使用 CASE… ENDCASE. 语句会更为方便:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em][size=1em]* CASE 语句
[size=1em]CASE sy-ucomm.
[size=1em]   WHEN ‘SAVE’.
[size=1em]           …
[size=1em]   WHEN ‘SRTA’.
[size=1em]       …
[size=1em]   WHEN ‘SRTD’.
[size=1em]      …
[size=1em]   WHEN ‘GETD’.
[size=1em]     …
[size=1em]   WHEN OTHERS.
[size=1em]     …
[size=1em]END CASE.




3.4 循环操作:Do、While语句
3.4.1 Do语句
Do语句形式:
DO  X  TIMES.
END DO.

通过设置 TIMES 的值来指定循环次数:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em][size=1em]J = 4.
[size=1em]DO J TIMES.

[size=1em]   WRITE :/ ‘Hello world!’.

[size=1em]ENDDO.




注意的是:使用Do语句时,切勿不能进入死循环:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em][size=1em]DO.

[size=1em]   WRITE :/ ‘Hello world!’.

[size=1em]ENDDO.



以上程序语法可以通过,但会陷入死循环,这样会致使程序死掉。
所以在操作时,应细心慎重,避免出现这类错误,程序陷入死循环时可大可小,严重时甚至会导致整个系统崩溃。

3.4.2 While语句
WHILE循环是一个入口条件循环的语句,必须在进入循环前检查判断并返回结果。
只有条件为真(True)时,才会进入循环体内操作;
如果为假(False)则会直接跳过 ENDWHILE 后面,不会执行循环体。

WHILE语句格式:
WHILE <表达式>
ENDWHILE.

3.4.3  嵌套循环
DOWHILE 之间都可以嵌套循环操作。
不过,为避免性能消耗,一般超过3层的嵌套,就要考虑优化程序。
以下是两层嵌套的简单例子:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em][size=1em]DO 2 TIMES.

[size=1em]  WRITE : / SY-INDEX.

[size=1em]  DO 3 TIMES.

[size=1em]    WRITE :  / ‘    ‘, SY-INDEX.

[size=1em]  ENDDO.

[size=1em]ENDDO.





3.4.4 循环助手:CONTINUEEXIT语句
1. CONTINUE语句
一般来说,进入循环体后,在下次循环判断之前,会执行完循环体内所有程序。
CONTINUE语句可以在循环过程中,根据判断结果,忽略部分程序,直接进入下次循环,甚至终止。
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em][size=1em]DO 10 TIMES.

[size=1em]  IF SY-INDEX > 4.

[size=1em]    CONTINUE .

[size=1em]  ENDIF.

[size=1em]  WRITE :/ SY-INDEX.

[size=1em]ENDDO.



上面程序中,当循环到第4次之后,才会输出 sy-tabix 的值。

2. EXIT语句
EXIT语句的作用和CONTINUE语句相似,只是不同的是:
CONTINUE语句在循环过程中,可以进入下次循环
EXIT语句则直接终止循环。
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em][size=1em]WHILE  J > 3.

[size=1em]  IF SY-SUBRC <>0.

[size=1em]    EXIT.

[size=1em]  ENDIF.

[size=1em]ENDWHILE.




3.4.5 CHECK语句
CHECK语句IF语句相似,区别在于 CHECK 只能做一次判断,且没有分支。
所以 CHECK 多用于执行结果或者循环中的条件判断:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em][size=1em]DO 10 TIMES.

[size=1em]  CHECK SY-INDEX <= 4.
[size=1em]  WRITE : / SY-INDEX.

[size=1em]ENDDO.





最后,展示下通过用控制语句输出 乘法口诀表 的实例:
[size=1em]
[size=1em]01

[size=1em]02

[size=1em]03

[size=1em]04

[size=1em]05

[size=1em]06

[size=1em]07

[size=1em]08

[size=1em]09

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em]21

[size=1em]22

[size=1em]23

[size=1em]24

[size=1em]25

[size=1em]26

[size=1em]27

[size=1em]28

[size=1em]29

[size=1em]30

[size=1em]31

[size=1em]32

[size=1em]33

[size=1em][size=1em]DATA x TYPE I.
[size=1em]DATA y TYPE I.
[size=1em]DATA z TYPE I

[size=1em]DATA xc(2) TYPE C .
[size=1em]DATA yc(2) TYPE C .
[size=1em]DATA zc(2) TYPE C .

[size=1em]x = 0 .
[size=1em]y = 0 .

[size=1em]DO 9 TIMES.
[size=1em]  WRITE / .
[size=1em]  x = x + 1 .
[size=1em]  y = 0 .

[size=1em]  DO 9 TIMES.
[size=1em]    y = y + 1 .
[size=1em]    z = x * y .

[size=1em]    xc = x .
[size=1em]    yc = y .
[size=1em]    zc = z .

[size=1em]    WRITE : xc  ,
[size=1em]            'X'  ,
[size=1em]            yc  ,
[size=1em]            '='  ,
[size=1em]            zc  ,
[size=1em]            ',' .
[size=1em]  ENDDO.

[size=1em]ENDDO.




执行结果:

                               
登录/注册后可看大图




ABAP Basis, SAP ABAP, SAP ABAP 开发系列\ ABAP 开发, CASE, CHECK, CONTINUE, DO, EXIT, IF, LOOP, Nested Loop, SAP, SAP ABAP, WHILE

回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则


QQ|科莱特教育

GMT, 2025-4-19 00:17 , Processed in 0.049471 second(s), 23 queries .

福州科莱特教育科技有限公司 版权所有 闽ICP备2021003729号-2

Copyright C 2018-2022 All Rights Reserved

快速回复 返回顶部 返回列表