В условном операторе if в ABAP/4 используются операторы отношения для проверки на равенство и неравенство, специальные операторы отношения для строковых сравнений и для разрядных (битовых) масок. (Разрядные сравнения не часто используются в ABAP/4 и мы их рассматривать не будем)
Синтаксис оператора if.
if [not] exp [ and [not] exp ] [ or [not] exp ].
---
[elseif exp.
---]
[else.
---]
endif.
где:
· exp – логическое выражение, которое может быть истинным или ложным.
· --- представляет любое число строк программы. В операторе допустимы пустые строки.
Особенности использования оператора if:
· Каждому if должно соответствовать endif.
· else и elseif являются дополнительными.
· Для задания сложных условий могут использоваться круглые скобки, которые должны быть отделены пробелом.
Например, if (f1 = f2) or (f1 = f3) правильно,
if (f1 = f2) or (f1 = f3) является неправильным.
· Переменные могут сравниваться с пробелом, или нулем, используя дополнение is initial. Например, if f1 is initial, будет истина, если f1 будет типом c и будет пробелом. Если f1 – любой другой тип данных, то выражение будет истинным, если f1 равен нулю.
· Чтобы задать отрицание, not должен предшествовать логическому выражению. Например, if not f1 is initial, правильно. if f1 is not initial, является неправильным.
· Переменные могут сравниваться со значением nulls используя дополнение, is null. Например, if f1 is null.
Логические операторы для операндов любого типа
(общие сравнения и их дополнительные формы).
Сравнение | Альтернативная форма | Когда результат True |
v1 = v2 | EQ | v1 равен v2 |
v1 <> v2 | NE, >< | v1 не равен v2 |
v1 > v2 | GT | v1 больше v2 |
v1 < v2 | LT | v1 меньше v2 |
v1 >= v2 | GE, => | v1 больше или равен v2 |
v1 <= v2 | LE, =< | v1 меньше или равен v2 |
v1 between v2 and v3 | v1 находится между v2 и v3 (включительно) | |
not v1 between v2 and v3 | v1 находится за пределами диапазона v2 к v3 (включительно) |
v1 и v2 могут быть переменными, литералами, или Field Strings. В случае переменных или литералов, выполняется автоматическое преобразование, если тип данных или длина не соответствуют. Field Strings обрабатываются как переменные типа c.
Сравнение двух значений разных типов данных, приведет к их внутреннему автоматическому преобразованию согласно приоритету:
· Если одно поле – тип f, другое преобразовывается в тип f.
· Если одно поле – тип p, другое преобразовывается в тип p.
· Если одно поле – тип i, другое преобразовывается в тип i.
· Если одно поле – тип d, другое преобразовывается в тип d. Типы c и n не преобразовываются. Они сравниваются непосредственно.
· Если одно поле – тип t, другое преобразовывается в тип t. Типы c и n не преобразовываются. Они сравниваются непосредственно.
· Если одно поле – тип n, оба преобразовываются в тип p (в этом случае другое поле может только быть типом c или x).
· В случае, если одно поле – тип c, и другое – тип, x. x преобразовывается в тип c.
Преобразования следуют тем же самым правилам, как и в операторе move. Преобразования типов полностью рассмотрены в документации ключевого слова ABAP/4 под заголовком "Операторы отношения для всех типов данных." ("Relational Operators for All Data Types.")