ABAP 常量和文本值

ABAP 常量和文本值

ℹ️概述
文字是您在程序的源代码中创建的未命名数据对象,他们完全由他们的价值定义,您不能更改文字的值。常量是通过使用声明性语句静态创建的命名数据对象,分配给常数的值在程序执行期间不能更改。

📝 文字类型

文字有两种基本类型:

🔢 数字字面量

数字文字是可以有前缀符号的数字序列。在数字文字中,没有十进制分隔符,也没有带尾数和指数的符号。

1
183.  -97.  +326.

🔤 字符文字

字符文字是用单引号括起来的ABAP程序的源代码中的字母数字字符序列。

1. 文本字段文字 (类型C)

用单引号括起的字符文字具有预定义的ABAP类型C。

1
2
3
REPORT YR_SEP_12.
Write 'Tutorials Point'.
Write / 'ABAP Tutorial'.

2. 字符串文字 (类型STRING)

包含在后引号中的文字具有ABAP类型STRING。

1
2
3
REPORT YR_SEP_12.
Write `Tutorials Point `.
Write / `ABAP Tutorial `.

⚠️ 重要区别

特性 文本字段文字 字符串文字
引号类型 单引号 ' 后引号 `
数据类型 C STRING
尾随空白 被忽略 被保留
输出示例 Tutorials Point Tutorials Point
📌输出结果
上述两种情况的输出相同:
1
2
Tutorials Point
ABAP Tutorial

🎯 CONSTANTS声明

语法格式

1
CONSTANTS <f> TYPE <type> VALUE <val>.

参数说明

  • <f> - 指定常量的名称
  • <type> - 表示常量的类型,继承与现有数据类型相同的技术属性
  • <val> - 为声明的常量名<f>赋值一个初始值
⚠️必须使用VALUE子句
我们应该使用CONSTANTS语句中的VALUE子句。子句”VALUE”用于在声明期间为常量赋予初始值。

CONSTANTS与DATA的区别

特性 DATA CONSTANTS
值可变性 可更改 不可更改
声明方式 DATA CONSTANTS
初始化 可选 必须指定
用途 存储变量数据 存储固定值

📊 常量类型

1. 基本常量

涉及基本数据类型的常量。

1
2
3
REPORT YR_SEP_12.
CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'.
Write: / 'The value of PQR is:', PQR.

输出

1
The value of PQR is: 1.2356

2. 复杂常量

由多个字段组成的结构化常量。

1
2
3
4
5
BEGIN OF EMPLOYEE,
Name(25) TYPE C VALUE 'Management Team',
Organization(40) TYPE C VALUE 'Tutorials Point Ltd',
Place(10) TYPE C VALUE 'India',
END OF EMPLOYEE.
💡代码解析
EMPLOYEE是一个由Name、Organization和Place字段组成的复杂常量。

3. 参考常量

引用其他对象或数据的常量。

1
CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.
📌参考常量用途
我们可以在比较中使用常量引用,或者我们可以将其传递给过程。

🔧 常量使用示例

实际应用场景

1. 配置常量

1
2
3
4
5
" 应用程序配置常量
CONSTANTS:
MAX_RETRIES TYPE I VALUE 3,
TIMEOUT_SECS TYPE I VALUE 30,
DEBUG_MODE TYPE C VALUE 'X'.

2. 业务规则常量

1
2
3
4
5
" 业务规则
CONSTANTS:
TAX_RATE TYPE P DECIMALS 2 VALUE '0.18',
DISCOUNT_THRESHOLD TYPE I VALUE 1000,
CURRENCY_CODE TYPE C VALUE 'CNY'.

3. 系统常量

1
2
3
4
5
" 系统参数
CONSTANTS:
COMPANY_CODE TYPE C VALUE '1000',
FISCAL_YEAR TYPE N VALUE '2024',
DECIMAL_SEPARATOR TYPE C VALUE '.'.

🎨 常量命名规范

推荐的命名模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
✅ 使用大写字母和下划线:
MAX_LENGTH
DEFAULT_VALUE
ERROR_MESSAGE

✅ 带有业务含义的常量:
TAX_RATE_VAT
DISCOUNT_SENIOR
CURRENCY_USD

✅ 系统配置常量:
DB_HOST_NAME
API_TIMEOUT
MAX_LOGIN_ATTEMPTS

常量的作用域

作用域 声明位置 特点
全局常量 在全局声明部分 整个程序可见
局部常量 在子程序/方法中 仅在声明范围内可见
类常量 在类定义中 类的静态属性

🔄 常量与变量的对比



graph TD
    A[数据对象] --> B[变量]
    A --> C[常量]
    
    B --> B1[可修改]
    B --> B2[使用DATA声明]
    B --> B3[无初始值]
    
    C --> C1[不可修改]
    C --> C2[使用CONSTANTS声明]
    C --> C3[必须有初始值]

最佳实践

  1. 何时使用常量

    • 固定值配置
    • 业务规则
    • 系统参数
    • 常用字符串
  2. 避免使用常量的情况

    • 需要频繁变化的值
    • 用户输入的数据
    • 运行时计算的结果

💡 最佳实践

1. 常量声明原则

  • 常量名称要有意义,使用大写字母
  • 始终指定数据类型
  • 为常量提供有初始值
  • 遵循命名规范

2. 使用场景选择

  • 使用常量而不是硬编码值
  • 将常量集中管理
  • 常量值变更时只需修改一处
  • 使用常量提高代码可读性

3. 性能考虑

  • 常量在编译时就确定值
  • 运行时访问常量比变量更快
  • 常量不占用运行时内存