Управленческий консалтинг
и автоматизация
pra.ru
+7(495)539-36-90
+7(812)329-40-04

Евгений Пудеев

Специалист Департамента решений SAP

ОСТАВИТЬ ВОПРОС
Введите код с картинки:

«Строковый шаблон» - пример лаконичности в ABAP

В версии ABAP 7.31 появились ряд новшеств, позволяющих ускорить и сделать менее затратной работу программиста за счет более лаконичных и выразительных языковых средств.  Рассмотрим так называемый строковый шаблон (string template).  Это не имеет отношения к регулярным выражениям в ABAP (regular expression), а является отдельным понятием.

Строковый шаблон ABAP определяется с помощью двух символов “|”.  Текст между ними воспринимается как символьная строка (character string).  Например,

DATA LV_STR TYPE STRING.

LV_STR = |Hello World|.

 

Это тоже самое, что и

LV_STR = ‘Hello World’.

 

Но отличие в том, что строковый шаблон может включать в себя:

-          символьные строки,

-          выражения (expressions),

-          управляющие символы (control characters).

В качестве выражения могут выступить объекты данных, формулы для вычислений, предопределенные функции и даже функциональные методы (включая цепочки методов).

Выражения в строковом шаблоне должны быть заключены в парные фигурные скобки “{“ и “}”.

Проще всего показать использование на конкретном примере. Напишем программу, которая вычисляет требуемое число последовательности Фиббоначчи и выводит результат в виде строки “Fibonacci( n ) = R”.В старом стиле без использования строковых шаблонов это выглядело бы так:

CONSTANTS:

lc_number TYPE i VALUE 7.“ Номер числа последовательности Фибоначчи

DATA:

lv_i TYPE i,

  lv_c1 TYPE char10,

  lv_c2 TYPE char10,

lv_string TYPE string.

lv_c1 = lc_number.

lv_c2 = lcl_fib=>get_number( lc_number ). “ Вычисление числа Фибоначчи

CONDENSE: lv_c1, lv_c2.

CONCATENATE ‘Fibonacci(‘ lv_c1 ‘) =’ lv_c2 INTO lv_string SEPARATED BY space.

WRITE: / lv_string.

 

А с использованием строковых шаблонов так:

CONSTANTS:

lc_number TYPE i VALUE 7.“ Номер числа последовательности Фибоначчи

DATA:

lv_string1 type string.

lv_string1 = |Fibonacci( { lc_number } ) = { lcl_fib=>get_number( lc_number ) }|.

 

Получилось значительно удобнее. Отметим, что в строковом шаблоне вызывается непосредственно функциональный метод!

Если нужно вывести в строке непосредственно символ “|”, “{“ или “}”, то перед ним нужно ставить символ обратный слэш “\”:

lv_str = |Это фигурные скобки \{  \}|.

 

Ниже приведены определение и реализация класса, который использовался в примерах.

CLASS lcl_fib DEFINITION.

  PUBLIC SECTION.

CLASS-METHODS: get_number IMPORTING ip_n TYPE i

                                RETURNING VALUE(result) TYPE i.

ENDCLASS.

 

CLASS lcl_fib IMPLEMENTATION.

  METHOD get_number. “ Вычисление числа Фибоначчи

IF ip_n< 1.

      result = 0.

    ELSEIF ip_n = 1.

      result = 1.

    ELSE.

      result = get_number( ip_n – 1 ) + get_number( ip_n – 2 ).

    ENDIF.

  ENDMETHOD.

ENDCLASS.

 

 

 

 

Комментарии (0)
Введите код с картинки:

Евгений Пудеев

Специалист Департамента решений SAP

Карта сайта