Когда программа вызывает процедуры или функцию ,она может им послать данные для обработки. Однако, когда вы создаете процедуру или функцию, которые производят операции на данных, посланных им из вызывающей программы, то процедура или функция должны содержать в своем определении параметры, для приема данных. В приведенных ниже секциях содержится информация о работе с параметрами:
Определение параметров в процедурах и функциях
Когда программа посылает данные в процедуру или функцию, параметры в процедуре или функции принимают эти данные, с тем, что на данных можно было произвести операции. Когда вы желаете создать процедуры или функции, которые будут обрабатывать данные, посланные вызывающей программой, вам необходимо включить в определение процедур или функций параметры, которые будут принимать эти данные..
Приведенная ниже строка кода показывает основной формат для включения параметров в определение процедуры:
![]() | |
---|---|
PROCEDURE myProcedure LPARAMETERS Par1, Par2, Par3, ... * Вставьте здесь код процедуры. ENDPROC |
-или-
![]() | |
---|---|
PROCEDURE myProcedure(Par1, Par2, Par3, ...) * Вставьте здесь код процедуры. ENDPROC |
Первая процедуры включает оператор LPARAMETERS который может содержать один или более параметров. Вторая процедура перечисляет те же самые параметры, заключенные в круглые скобки, сразу после имени процедуры. Использование оператора LPARAMETERS, или заключение списка параметров в круглые скобки определяет параметры, область видимости которых принадлежит локальной области процедуры. Вы может использовать ключевое слово PARAMETERS вместо LPARAMETERS для акцептирования параметров принадлежащих частной области видимости. Вы можете послать множественные значения в процедуру или функцию, разделяя значения запятой.
Например, в приведенном ниже примере показано определение процедуры, которая включает в себя параметры. Первая процедура включает оператор LPARAMETERS и два параметра, myPar1
и myPar2
. Вторая процедура перечисляет теже самые параметры, заключенные в круглые скобки (()) сразу после имени процедуры. Обе процедуры добавляют значение, указанное в myPar2
к значению, указанному вв myPar1
и присваивают результат для myPar1
. По умолчанию, данные посылаются по ссылке, так что новое значение myPar1
замещает его оригинальное значение.
![]() | |
---|---|
PROCEDURE myProcedure LPARAMETERS myPar1, myPar2 myPar1 = myPar1 + myPar2 ENDPROC |
-OR-
![]() | |
---|---|
PROCEDURE myProcedure(myPar1, myPar2) myPar1 = myPar1 + myPar2 ENDPROC |
Схожим образом вы можете включить параметры в определение функции. Для получения более подробной информации, смотрите описание команд PROCEDURE, FUNCTION, LPARAMETERS и PARAMETERS.
Передача данных в процедуры или функции
Вы можете передать данные, или, более точно, "аргументы" из вашей программы в процедуры или функциями двумя способами, в зависимости от приведенного ниже:
-
Желаете ли вы послать данные по ссылке или по значению. Для получения более подробной информации, смотрите описание Посылка данные в параметры.
-
Как вы вызываете функцию или процедуру. Для получения более подробной информации, смотри описание Как: вызвать процедуры или функции.
Например, когда вы вызываете процедуру с помощью команды DO, вы можете послать данные используя ключевое слово WITH и список параметров. В приведенном ниже примере, переменные myVar
и myVar2
содержат значения 4 и 5. Когда вы вызываете процедуру myProcedure
с помощью команды DO, список параметров, определенных с ключевым словом WITH посылает эти переменные в процедуру:
![]() | |
---|---|
myVar = 4 myVar2 = 5 DO myProcedure WITH myVar, myVar2 |
По умолчанию, переменные и массивы посылаются в процедуры по ссылке. Поэтому, изменения, сделанные в процедуре в посланных переменных и массивах, возвращаются назад в управляющую программу. Например, предположим, что процедура увеличивает значение, содержащееся в myVar
на величину, указанную в myVar2
. Измененное значение myVar
становится новым значением myVar
, когда процедура возвращает управление вызывающей программе.
С другой стороны, вы хотите использовать команду DO, но желаете послать данные по значению, заключив каждый параметр в круглые скобки, (()), как это показано в приведенном ниже примере:
![]() | |
---|---|
DO myProcedure WITH (myVar), (myVar2) |
Когда вы вызываете функцию, вы можете послать данные с помощью списка параметров, заключенных в круглые скобки, как это показано в приведенном ниже примере:
![]() | |
---|---|
myFunction(myVar, myVar2) |
По умолчанию, переменные и массивы посылаются в определенные пользователем функции по значению. Поэтому, изменения, произведенные в функции над посланными переменными или массивами не возвращаются назад вызывающей программе. Однако, вы можете послать переменные и массивы по ссылке, предварив переменные и массивы символов (@), как показано в приведенном ниже примере:
![]() | |
---|---|
myFunction(@var1, @var2, ...) |
В приведенной ниже таблицы суммированы пути, по которым вы можете послать переменные в процедуры и функции.
Вызов процедуры или функции | Комментарии |
---|---|
|
Вызывает процедуру и посылает параметры по ссылке. |
|
Вызывает процедуру и посылает параметры по значению. |
|
Вызывает функцию и посылает параметры по значению. |
|
Вызывает функцию и посылает параметры по ссылке. |