Синтаксис передачи типизированных параметров.
form s1 using u1 type t value(u2) type t
changing c1 type t value(c2) type t.
где:
s1— имя подпрограммы
u1,u2,c1иc2— формальные параметры
t— или тип данных ABAP/4, или тип данных, определенный пользователем
18. Передача Field Strings.
Можно передать Field String тем же способом, что и любой другой параметр. Однако если нужно обратиться к компонентам Field String в пределах подпрограммы, необходимо сделать структуру Field String известной в подпрограмме, используя одно из двух дополнений оператораform:
§ like x
§ structure x
Здесьxможет быть или Field String, или структурой DDIC, или таблицей. Например,
Form s1 using fs1 structure ztxlfa1.
определяетfs1имеющей структуру таблицы DDICztxlfa1.
Способы передачи параметров.
Есть три способа передачи параметров подпрограммам:
§ передача по ссылке
§ передача по значению
§ передача по значению и результату
Дополнения оператора form и получающийся метод передачи параметров:
Дополнение | Метод передачи |
using v1 | Передача по ссылке |
changing v1 | Передача по ссылке |
using value(v1) | Передача по значению |
changing value(v1) | Передача по значению и результату |
Передача по значению.
При передаче параметра по значению для этого значения выделяется новая память. Эта память выделяется при вызове подпрограммы и освобождается по окончании выполнения подпрограммы. Поэтому ссылка на параметр — ссылка на отдельную область памяти, которая известна только в пределах подпрограммы. Исходное значение не изменяется при изменении значения параметра.
Эффект передачи параметров по значению:
Report ztx1806.
2 data: f1 value 'A'.
Perform s1 using f1.
5 write / f1.
Form s1 using value(p1).
8 p1 = 'X'.
9 write / p1.
Endform.
X
A
§ В строке 2 выделяется память для переменнойf1
§ В строке 4 управление передается строке 7
§ В строке 7 определяется передачаf1по значению, поэтомуp1обращается к новому участку памяти, который независим отf1. Значениеf1автоматически копируется в память дляp1
§ В строке 8 изменяется содержимое памяти дляp1. Значениеf1неизменно
§ В строке 9 выводится значениеp1:X
§ В строке 10 управление возвращается к строке 5
§ В строке 5 выводится значениеf1:A
Передача параметров по значению используется при потребности в локальной копии переменной, которую можно изменять, не затрагивая оригинал. Передача по ссылке более эффективна, чем передача параметров по значению.
Передача по ссылке.
При передаче параметра по ссылке новая память для значения не выделяется. Вместо этого передается указатель на исходную область памяти. Передача параметров по ссылке — ссылка на исходное положение переменной в памяти. Изменения переменной в подпрограмме изменяют исходное значение памяти.
Эффект передачи параметров по ссылке:
Report ztx1804.
2 data f1 value 'A'.
Perform s1 using f1.
5 write / f1.
Form s1 using p1.
8 p1 = 'X'.
Endform.
X
§ В строке 2 выделяется память для переменнойf1(для примера предположим, что адрес памяти —1000)
§ В строке 4 управление передается строке 7
§ В строке 7 определяется передачаf1по ссылке, поэтомуp1— указатель на адрес памяти1000
§ В строке 8 изменяется содержимое памяти по адресу1000, вызывая изменение содержимого памяти дляf1наX
§ В строке 9 управление возвращается к строке 5
§ В строке 5 выводится значениеf1: X
Оба дополненияusing f1иchanging f1при передачеf1по ссылке идентичны по своей функции. Оба существуют по причине, что при их использовании должным образом «регистрируется», изменит подпрограмма параметр или нет.
Кодchangingнужно использовать с параметрами, изменяемыми подпрограммой, кодusing— с параметрами, которые подпрограммой не изменяются.