Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
110
Добавлен:
15.06.2014
Размер:
10 Mб
Скачать

5.3.3 Взаимодействие программ вVisualFoxPro

Различают главную процедуру (или головную программу) и вызываемые ей процедуры. Глубина вложения процедур равна 32. Вызываемые процедуры могут быть оформлены как процедуры-подпрограммы и процедуры-функции. Обобщенное их название – User-Defined Functions (UDFs) – функции, определенные пользователем. Принципиальных различий между подпрограммами и функциями нет, и использоваться они могут одинаково. Однако обычно считается, что процедура-подпрограмма служит для выполнения каких-то действий, а процедура-функция – для определения и возврата в вызывающую процедуру некоторого значения. Имя процедуры не должно совпадать с именем встроенной функции, так как последняя имеет приоритет при вызове.

Синтаксис команд начала и завершения UDF приведен на рис 5.27.

PROCEDURE <procedure name>

FUNCTION <function name>

RETURN [<expr> | TO MASTER | TO <program name>]

Здесь <expr> – возвращаемое в вызывающую процедуру значение. Команда RETURN без аргументов возвращает управление вызывающей программе. Опция TO MASTER передает управление на самый верхний уровень в иерархии вызывающих программ. Опция TO <program name> возвращает управление указанной программе.

Оператор RETURN не является обязательным, так как неявная команда RETURN автоматически выполняется за последним оператором любого программного файла; кроме того, очередная следующая команда FUNCTION или PROCEDURE сигнализирует о конце предыдущей.

Рис. 5.27 Команды начала и завершения UDF

Данные передаются в UDF в форме параметров. Параметры определяются командой

PARAMETERS <parameter list>

которая должна быть следующей после команды начала UDF.

Чтобы избежать нерациональных потерь времени в связи с частыми обращениями к внешней памяти при вызове очередной процедуры, можно сгруппировать несколько UDF в один общий файл с расширением имени .prg, называемый процедурным файлом, и загружать этот файл с диска однократно. Такую загрузку выполняет команда открытия процедурного файла:

SET PROCEDURE TO [<procedure file>]

Здесь <procedure file> – имя процедурного файла, в котором находятся UDF, имеющие свои имена. Этот файл должен быть открыт до начала работы с UDF в вызывающей программе. Для закрытия файла процедур используется та же команда без необязательного параметра. Одновременно может быть открыт только один процедурный файл, поэтому очередная команда открытия нового процедурного файла автоматически закрывает ранее открытый процедурный файл. UDF можно также располагать в том же файле, где находится головная программа, причем в конце головной программы.

Чтобы выполнить любой программный (командный) файл или файл процедур, используется команда, представленная на рис. 5.28.

DO <file1> [WITH <parameter list>] [IN <file2>]

Здесь file1 – имя файла, содержащего программу, которую необходимо выполнить, либо имя UDF из открытого ранее процедурного файла, либо имя процедурного файла. Опция WITH <parameter list> позволяет передать параметры в вызываемую программу. Опция IN <file2> позволяет выполнить процедуру в заданном программном файле <file2>.

Рис. 5.28 Команды запуска программы в работу

Другой вариант выполнения UDF – обращение к ним как к функциям FoxPro, то есть по имени со следующим за именем списком параметров, заключенным в круглые скобки. Скобки могут не содержать параметров, так как эти параметры необязательны. Указанное обращение может использоваться в различных логических выражениях и во многих командах FoxPro.