ABAP To the Future 每天练一练2

*&---------------------------------------------------------------------*
*& Report ZTESTABAP0002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztestabap0002.



CLASS c1 DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS m1 IMPORTING p1 TYPE i DEFAULT 0
                     EXPORTING p2 TYPE i.
ENDCLASS.

CLASS c1 IMPLEMENTATION.
  METHOD m1.
    IF p1 IS SUPPLIED.
      DATA: lo_do_value TYPE REF TO data.
      DATA: lo_do_value1 TYPE REF TO data.
      DATA:lv_is_less TYPE abap_bool.
      DATA:l_indicator TYPE i VALUE '1'.
      CREATE DATA lo_do_value LIKE p1.
      GET REFERENCE OF p1 INTO lo_do_value.
      WRITE: lo_do_value->*.

      lo_do_value1 = REF #( p1 ).
      WRITE lo_do_value1->*.


      DATA: lt_empty TYPE STANDARD TABLE OF text200.
      IF boolc( lt_empty[] IS  INITIAL ) = abap_true.
        WRITE:/ 'This table is empty'.
      ELSE.
        WRITE:/ 'This table is as full as full can be'.
      ENDIF.

      lv_is_less = boolc( lt_empty[] IS INITIAL ).

      WRITE: / lv_is_less.

      IF boolc( 1 = 1 ) = abap_false.
        WRITE:/ '1 does not equal 2'.
      ELSE.

        WRITE:/ '1 equals 2, and the world is made of snow'.
      ENDIF.



      lv_is_less =  boolc( 1 = 1 ).

      WRITE: / lv_is_less.




      DATA(l_day) = SWITCH char10( l_indicator
            WHEN 1 THEN 'Monday'(326)
            WHEN 2 THEN 'Tuesday'(327)
            WHEN 3 THEN 'Wednesday'(328)
            WHEN 4 THEN 'Thursday'(329)
            WHEN 5 THEN 'Friday'(330)
            WHEN 6 THEN 'Saturday'(331)
            WHEN 7 THEN 'Sunday'(332)
            ELSE
*            THROW zcx_day_problem( )
             '123'
            ).


      WRITE: / l_day.


    ELSE.

    ENDIF.
    IF p2 IS NOT SUPPLIED.
      RETURN.
    ELSE.

    ENDIF.
  ENDMETHOD.
ENDCLASS.


START-OF-SELECTION.

  c1=>m1(
    EXPORTING
      p1 = 1
    IMPORTING
      p2 = DATA(lv_p2)
  ).

执行效果:

以下是对这段ABAP代码的详细解释:

1. 程序头部分

*&---------------------------------------------------------------------*
*& Report ZTESTABAP0002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztestabap0002.
  • 这部分是ABAP程序的头部注释和报告声明。注释部分用于描述程序的基本信息,REPORT ztestabap0002 声明了这是一个名为 ztestabap0002 的ABAP报表程序。
  • 2. 类定义部分

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS m1 IMPORTING p1 TYPE i DEFAULT 0
                     EXPORTING p2 TYPE i.
ENDCLASS.
  • CLASS c1 DEFINITION:定义了一个名为 c1 的类。
  • PUBLIC SECTION:表示以下定义的成员是公共的,可以被外部访问。
  • CLASS-METHODS m1:定义了一个类方法 m1
    • IMPORTING p1 TYPE i DEFAULT 0:该方法有一个输入参数 p1,类型为整数(i),默认值为 0。
    • EXPORTING p2 TYPE i:该方法有一个输出参数 p2,类型为整数。

3. 类方法实现部分

CLASS c1 IMPLEMENTATION.
  METHOD m1.
    ...
  ENDMETHOD.
ENDCLASS.

这部分是类 c1 中方法 m1 的具体实现。

输入参数检查
IF p1 IS SUPPLIED.
  ...
ELSE.
ENDIF.
  • 检查输入参数 p1 是否被提供。如果提供了 p1,则执行 IF 块中的代码;否则,不执行任何操作。
数据引用操作

DATA: lo_do_value TYPE REF TO data.
DATA: lo_do_value1 TYPE REF TO data.
CREATE DATA lo_do_value LIKE p1.
GET REFERENCE OF p1 INTO lo_do_value.
WRITE: lo_do_value->*.
lo_do_value1 = REF #( p1 ).
WRITE lo_do_value1->*.
  • DATA: lo_do_value TYPE REF TO data.:声明两个指向任意数据类型的引用变量 lo_do_value 和 lo_do_value1
  • CREATE DATA lo_do_value LIKE p1.:创建一个与 p1 类型相同的数据对象,并让 lo_do_value 指向它。
  • GET REFERENCE OF p1 INTO lo_do_value.:让 lo_do_value 指向 p1 的引用。
  • WRITE: lo_do_value->*.:输出 lo_do_value 引用的数据。
  • lo_do_value1 = REF #( p1 ).:使用类型推断创建一个指向 p1 的引用,并赋值给 lo_do_value1
  • WRITE lo_do_value1->*.:输出 lo_do_value1 引用的数据。
空表检查

DATA: lt_empty TYPE STANDARD TABLE OF text200.
IF boolc( lt_empty[] IS  INITIAL ) = abap_true.
  WRITE:/ 'This table is empty'.
ELSE.
  WRITE:/ 'This table is as full as full can be'.
ENDIF.
lv_is_less = boolc( lt_empty[] IS INITIAL ).
WRITE: / lv_is_less.
  • DATA: lt_empty TYPE STANDARD TABLE OF text200.:声明一个标准表 lt_empty,表中元素类型为长度为 200 的文本类型。
  • boolc( lt_empty[] IS INITIAL ):检查 lt_empty 表是否为空。如果为空,输出 This table is empty;否则,输出 This table is as full as full can be
  • lv_is_less = boolc( lt_empty[] IS INITIAL ).:将表是否为空的布尔结果赋值给 lv_is_less,并输出该布尔值。
条件判断
IF boolc( 1 = 1 ) = abap_false.
  WRITE:/ '1 does not equal 2'.
ELSE.
  WRITE:/ '1 equals 2, and the world is made of snow'.
ENDIF.
lv_is_less =  boolc( 1 = 1 ).
WRITE: / lv_is_less.
  • boolc( 1 = 1 ):判断 1 是否等于 1,这显然为真。由于判断为 abap_false 的条件不成立,所以会输出 1 equals 2, and the world is made of snow
  • lv_is_less = boolc( 1 = 1 ).:将判断结果赋值给 lv_is_less,并输出该布尔值。
条件选择

DATA(l_day) = SWITCH char10( l_indicator
      WHEN 1 THEN 'Monday'(326)
      WHEN 2 THEN 'Tuesday'(327)
      WHEN 3 THEN 'Wednesday'(328)
      WHEN 4 THEN 'Thursday'(329)
      WHEN 5 THEN 'Friday'(330)
      WHEN 6 THEN 'Saturday'(331)
      WHEN 7 THEN 'Sunday'(332)
      ELSE
       '123'
      ).
WRITE: / l_day.
  • SWITCH 语句根据 l_indicator 的值进行选择。l_indicator 的值为 1,所以 l_day 被赋值为 'Monday'(326),并输出该值。
输出参数检查
IF p2 IS NOT SUPPLIED.
  RETURN.
ELSE.
ENDIF.
  • 检查输出参数 p2 是否被提供。如果没有提供,方法直接返回;否则,不执行任何操作。

4. 程序执行部分

START-OF-SELECTION.
  c1=>m1(
    EXPORTING
      p1 = 1
    IMPORTING
      p2 = DATA(lv_p2)
  ).
  • START-OF-SELECTION:这是ABAP报表程序的起始事件,当程序开始执行时会触发。
  • c1=>m1(...):调用类 c1 的类方法 m1,传入输入参数 p1 的值为 1,并将输出参数 p2 的值存储在局部变量 lv_p2 中。

综上所述,这段代码定义了一个类 c1,其中包含一个类方法 m1,在方法中进行了数据引用操作、空表检查、条件判断和条件选择等操作,并在程序开始执行时调用了该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值