Распечатать страницу

Обмен данными между программными компонентами Visual Fox-Pro

« Назад

Программный компонент принимает некоторые значения в качестве входных данных и после выполнения предусмотренных алгоритмом действий возвращает результат – либо одно значения, либо несколько.

Входные данные могут быть переданы программному компоненту либо как глобальные переменные, либо через параметры. Результат, если он выдается в виде одного значения, целесообразно возвращать командой RETURN, а если программный компонент вырабатывает несколько значений, то они передаются вызывающей программе либо через параметры, либо как глобальные переменные.

Преимущественно обмен данными между программными компонентами осуществляется через параметры и посредством команды RETURN: для использования глобальных имен должны быть особые основания.

Проиллюстрируем применение параметров, продолжая вышеприведенный пример.

local x, y

store 25 to x

y = Sqrt(x)

? "Вывод результата выполняется в процедуре Output( )"

Output(x, y)

procedure Output(xVal, yVal)

? "x = ", xVal picture "99"

? "Квадратный корень из x равен ", yVal picture "9.9"

endProc

Поскольку передача данных процедуре Output( ) осуществляется через параметры, переменные x и y основной программы могут быть объявлены LOCAL.

Если для вызова процедуры использовать команду DO, то параметры перечисляются после опции WITH:

do Output with x, y

В VFP значения параметров можно принять, применив команду PARAMETERS или LPARAMETERS, заносящую значения параметров соответственно в частные и локальные переменные. Например:

procedure Output

lparameters xVal, yVal

? "x = ", xVal picture "99"

? "Квадратный корень из x равен ", yVal picture "9.9"

endProc

Способы обращения к программного компоненту не изменяются, например:

Output(x, y)

При вызове программного компонента можно передавать не все параметры, например:

local x, y

store 25 to x

y = Sqrt(x)

? "Вывод результата выполняется в процедуре Output( )"

&& Список параметров пуст

Output( )

&& Передаем только 1-й параметр

Output(x)

&& Передаем 2 параметра; 2-й параметр имеет пустое значение

Output(x, )

&& Передаем 2 параметра; 1-й параметр имеет пустое значение

Output( , y)

&& Передаем 2 параметра; оба параметра имеют пустое значение

Output( , )

&& Передаем 2 параметра; оба параметра определены

Output(x, y)

Число переданных параметров вернет функция PARAMETERS( ) или PCOUNT( ). Для распознавания параметра с пустым значением применяется функция EMPTY( ). Тогда процедуру Output( ), анализирующую все варианты передачи параметров, можно записать следующим образом:

procedure Output

lparameters xVal, yVal

local lPrintX, lPrintY

&& Значение параметр xVal (yVal) будет напечатано,
&& если переменная lPrintX (lPrintY) равна .T.

store .T. to lPrintX, lPrintY

numberOfPassedParams = Parameters( )

&& или: numberOfPassedParams = Pcount( )

do case

case numberOfPassedParams = 0

? "Процедура вызвана без параметров"

lPrintX = .F.

lPrintY = .F.

case numberOfPassedParams = 1

? "Значение 2-го параметра не передано"

lPrintY = .F.

case numberOfPassedParams = 2

do case

case Empty(xVal) and Empty(yVal)

? "Оба параметра имеют пустое значение"

lPrintX = .F.

lPrintY = .F.

case Empty(xVal)

? "1-й параметр имеет пустое значение"

lPrintX = .F.

case Empty(yVal)

? "2-й параметр имеет пустое значение"

lPrintY = .F.

endcase

endcase

if lPrintX then

? "x = ", xVal picture "99"

endif

if lPrintY then

? "Квадратный корень из x равен ", yVal picture "9.9"

endif

endProc

Из примера видно, что нельзя передать только второй параметр, но можно взамен любого параметра передать пустое значение, не указывая параметр в отведенном для него месте.

Параметры можно передать и основной программе, вызывая ее из программного компонента другого файла. Для приема значений параметров употребляются PARAMETERS или LPARAMETERS. Разместим в файле d:\Output.prg следующие строчки:

&& Файл d:\Output.prg

lparameters x, y

? "x = ", x picture "99"

? "Квадратный корень из x равен ", y picture "9.9"

Вызов d:\Output.prg выполним из программы, имеющейся в файле d:\Prog1.prg:

local x, y

store 25 to x

y = Sqrt(x)

? "Вывод результата выполняется программой файла d:\Output.prg"

do d:\Output with x, y

Как и в случае процедуры или функции, при обращении к основной программе иного файла могут передаваться пустые параметры или не все параметры, например:

&& Передаем только 1-й параметр

do d:\Output with x

&& Передаем 2 параметра; 1-й параметр имеет пустое значение

do d:\Output with , y