ABAP Keyword Documentation → ABAP Programming Guidelines → Robust ABAP → Data Types and Data Objects
Data Objects for Truth Values
Other versions: 7.31 | 7.40 | 7.54
Background
Truth values are results of logical expressions. A truth value is either true or false. ABAP does not yet support Boolean data types and thus does not support data objects for truth values. Therefore, the result of a logical expression cannot be assigned directly to a data object.
It has become common practice to express the truth value "true" as value "X" and the truth value "false" as a blank (" "). There are also Boolean functions that have a logical expression as an argument and are returned as the value "X" or a blank, depending on the result.
To make it easier to handle truth values expressed in this way, the type group abap
contains a data type abap_bool
of elementary type c
with length 1, and the constants abap_true
of value "X" and abap_false
of value " " as substitutes for a real Boolean data type. There is also a constant abap_undefined
of value "-".
Rule
Use the data type abap_bool for truth values
When working explicitly with truth values, use the type abap_bool
as a substitute
for a real Boolean data type. A data object declared in this way should have no values other than the
relevant constants abap_true
and abap_false
(also abap_undefined
).
Details
Using the type abap_bool
and the constants abap_true
and abap_false
makes it clear that truth values are being used here.
In accordance with the rule for avoiding literals in operand positions, not only the literals 'X'
and '
' should be used. State queries about the
predicate operators IS INITIAL
and IS NOT INITIAL
or the use of the constant space
are also not advisable, because they require
knowledge of the technical values of abap_true
and abap_false
, which are not significant in the sense of real Boolean data objects.
The type group abap
contains a third constant for the type abap_bool
,
namely abap_undefined
. However, implementing a three-value logic is only
useful and recommended in exceptional cases. In this case, note that abap_undefined
does not contain the initial value for a variable of type abap_bool
. The
initial value is always the value of abap_false
. However, the value of
abap_undefined can, if required, be specified using the addition VALUE
when declaring a truth value as the start value.
Bad Example
The following source code shows an unsuitable emulation of the Boolean data objects not present in ABAP.
DATA is_found TYPE c LENGTH 1.
...
is_found = 'X'.
...
IF is_found IS NOT INITIAL.
...
ENDIF.
Good Example
The following source code shows the recommended emulation of the Boolean data objects not present in ABAP.
DATA is_found TYPE abap_bool.
...
is_found = abap_true.
...
IF is_found = abap_true.
...
ENDIF.