Обмен данными между программными компонентами 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) будет напечатано, 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 |