使用基本数据对象和数据类型
学习目标
声明数据对象。
分配值。
ABAP 中的数据对象
ABAP 程序中的数据对象表示程序内存的预留部分。
ABAP 知道三种类型的数据对象:变量、常量和文字。

变量
变量是具有可在运行时更改的内容的数据对象。变量由名称标识。该名称还用于在运行时寻址数据对象。ABAP 变量的起始值始终是明确定义的。
常量
常量与变量类似。但与变量相比,该值在源代码中硬编码,在运行时不得更改。与变量一样,常量具有可用于重用它们的名称。
文字
文字的值也在源代码中硬编码。与常量相反,文字没有名称。因此,您无法重用文字。仅使用文字指定常量的值和变量的起始值。
始终键入 ABAP 数据对象:每个数据对象都基于数据类型,该数据类型确定其可包含的信息类型。ABAP 数据对象的数据类型在整个程序执行过程中保持不变。
变量声明
ABAP 程序中的变量使用关键字 DATA 声明。
DATA 语句由三部分组成。下面,我们来详细了解一下每个部分。

DATA
关键字 DATA 后跟变量的名称。变量名称的长度最多可达 30 个字符。它可以包含字符 A-Z、数字 0-9 和下划线字符。名称必须以字母或下划线开头。
类型
在附加项 TYPE 后指定变量的类型。在此示例中,使用内置类型 i(用于整数)和字符串(具有可变长度的字符串)。
VALUE
附加 VALUE 是可选的,您可以使用它来指定变量的起始值。如果缺少 VALUE,则使用取决于变量技术类型的初始值创建变量。
ABAP 数据类型的源

ABAP 提供以下数据类型源:
ABAP 内置
ABAP 为简单数字、字符和二进制数据对象设置了 14 种预定义数据类型。
TYPES 语句
语句 TYPES 允许您定义数据类型并在不同的位置重用它们,具体取决于定义的位置。
ABAP 字典
ABAP 字典是 ABAP 资源库的一部分。此外,它还管理整个系统中可用的全局数据类型。ABAP 字典类型不仅定义技术属性,还会添加语义信息,例如标签。实施用户界面时,ABAP 字典类型特别有用。
试用:预定义的 ABAP 类型
与本课程的第一个练习一样,创建一个实施接口 IF_OO_ADT_CLASSRUN 的新全局类。
将以下代码片段复制到方法 if_oo_adt_classrun~main() 的实施部分:
* Data Objects with Built-in Types
**********************************************************************
" comment/uncomment the following declarations and check the output
DATA variable TYPE string.
* DATA variable TYPE i.
* DATA variable TYPE d.
* DATA variable TYPE c LENGTH 10.
* DATA variable TYPE n LENGTH 10.
* DATA variable TYPE p LENGTH 8 DECIMALS 2.
* Output
**********************************************************************
out->write( 'Result with Initial Value)' ).
out->write( variable ).
out->write( '---------' ).
variable = '19891109'.
out->write( 'Result with Value 19891109' ).
out->write( variable ).
out->write( '---------' ).
按 CTRL + F3 激活类,按 F9 将其作为控制台应用执行。
分析控制台输出。取消注释 变量 的不同声明。尝试您自己的声明以熟悉概念。
常量和文字
常量声明

常量是具有硬编码值的数据对象,在运行时期间不得更改。对常量的任何写入访问都会导致语法错误。
在 ABAP 中,使用关键字 CONSTANTS 声明常量。CONSTANT 语句包含与 DATA 语句相同的部分。唯一的区别是 VALUE 附加为必填项。
如果常量的值应为类型特定的初始值,则可以在特殊形式 VALUE IS INITIAL 中使用 VALUE 附加。
ABAP 中的文字
文字是具有硬编码值的匿名数据对象。文字通常用于定义常量的非初始值和变量的非初始起始值。

从技术上讲,您可以在代码中的任何位置使用文字。为支持可读性和可维护性,建议定义并使用常量。
ABAP 知道三种类型的文字:
数字文字是带或不带符号的整数。数字文字通常具有数据类型 I。仅当数据类型 I 的值过大时,才会使用类型 P,长度足够且没有小数位。
文本文字是用简单引号括起来的字符串。文本文字的类型为 C。长度派生自引号中的内容。忽略尾随空格。
字符串文字是一对反引号 (`) 中的字符串。字符串文字的类型为 STRING。它们应该用于为字符串类型化的数据对象提供值。
试用:数据对象
与本课程的第一个练习一样,创建一个实施接口 IF_OO_ADT_CLASSRUN 的新全局类。
将以下代码片段复制到方法 if_oo_adt_classrun~main() 的实施部分:
* Example 1: Local Types
**********************************************************************
* Comment/Uncomment the following lines to change the type of my_var
TYPES my_type TYPE p LENGTH 3 DECIMALS 2.
* TYPES my_type TYPE i .
* TYPES my_type TYPE string.
* TYPES my_type TYPE n length 10.
* Variable based on local type
DATA my_variable TYPE my_type.
out->write( `my_variable (TYPE MY_TYPE)` ).
out->write( my_variable ).
* Example 2: Global Types
**********************************************************************
* Variable based on global type .
" Place cursor on variable and press F2 or F3
DATA airport TYPE /dmo/airport_id VALUE 'FRA'.
out->write( `airport (TYPE /DMO/AIRPORT_ID )` ).
out->write( airport ).
* Example 3: Constants
**********************************************************************
CONSTANTS c_text TYPE string VALUE `Hello World`.
CONSTANTS c_number TYPE i VALUE 12345.
"Uncomment this line to see syntax error ( VALUE is mandatory)
* constants c_text2 type string.
out->write( `c_text (TYPE STRING)` ).
out->write( c_text ).
out->write( '---------' ).
out->write( `c_number (TYPE I )` ).
out->write( c_number ).
out->write( `---------` ).
* Example 4: Literals
**********************************************************************
out->write( '12345 ' ). "Text Literal (Type C)
out->write( `12345 ` ). "String Literal (Type STRING)
out->write( 12345 ). "Number Literal (Type I)
"uncomment this line to see syntax error (no number literal with digits)
* out->write( 12345.67 ).
按 CTRL + F3 激活类,按 F9 将其作为控制台应用执行。
浏览源代码以熟悉概念。
取消注释 my_type 的不同声明,然后使用 F2 和 F3 分析变量 my_variable 的定义。
使用 F2 和 F3 分析可变 机场 的定义。
取消注释常量 c_text2 的定义以查看语法错误。
取消注释最后一个代码行以查看语法错误。
...
到数据对象的值分配
使用值赋值来更改变量的值。
观看此视频,了解如何操作。
视频:本节含 SAP 官方视频(视频 ID
1_6ei6t5pz),需在 learning.sap.com 在线观看。
隐式类型转换
尽管 ABAP 是一种类型化的编程语言,但在值赋值中,源表达式类型和目标变量的类型可以不同。如果是这种情况,运行时会尝试进行类型转换。

如图所示,如果可能,请尝试避免类型转换,原因如下:
附加运行时消耗:类型转换的值比具有相同类型的值分配需要更多的运行时。
潜在运行时错误:源类型和目标类型的某些组合可能会导致运行时错误。例如,如果目标变量具有数字类型 l,并且源表达式具有类似类型的字符,则运行时如果无法将文本转换为数字,则会引发错误。
潜在信息丢失:源类型和目标类型的某些组合不会导致运行时错误,但可能会导致数据丢失。例如,如果源和目标都属于 C 类型,但目标变量的类型较短。然后,运行时只是截断源的值。
重置变量
语句 CLEAR 是一种特殊的值分配。用于将变量重置为其类型特定的初始值。

注意
CLEAR 语句忽略 VALUE 附加中的起始值。CLEAR 后,变量始终包含类型特定的初始值。
值分配中的内嵌声明
观看此视频,以了解内联声明及其在值分配中的工作方式。
视频:本节含 SAP 官方视频(视频 ID
1_9ig9t2qc),需在 learning.sap.com 在线观看。