Процедуры
Процедура начинается с ключевого
слова PROCEDURE и выполняется, пока не будет выполнено одно из следующих
условий:
-
Еще раз встретится слово PROCEDURE.
-
Будет обнаружена команда RETURN - возвращение в предыдущую программу.
-
Будет выдана команда CANCEL - прерывание работы программы.
-
Будет выдана команда QUIT - выход из СУБД.
-
Встретится новая команда DO для запуска другой программы.
-
Будет достигнут конец файла.
PROCEDURE имя_процедуры
[ PARAMETERS список_параметров ]
тело
RETURN
Поиск вызванной процедуры
осуществляется в следующей последовательности:
-
в файле, из которого вызывается процедура;
-
в процедурном файле, если используется конструкция SET PROCEDURE;
-
просматриваются программы в соответствии с иерархией вызовов;
-
ищется отдельный файл с тем же именем, что и процедура.
Вызов процедуры:
DO имя_процедуры
Можно при вызове процедуры
указать файл, в котором находится процедура - в этом случае будет просматриваться
указанный файл.
DO IN имя_файла имя_процедуры
В процедурном файле хранятся
общие для проекта процедуры. Для открытия процедурного файла:
SET PROCEDURE TO имя_файла
Для закрытия - то же, но
без указания имени файла
Функции
В FoxPro аналогично процедуре
трактуется понятие пользовательской функции, которая начинается с ключевого
слова FUNCTION и в отличие от процедуры может вернуть необходимые
значения в вызывающую программу.
FUNCTION имя_функции
[PARAMETERS
список_параметров ]
тело
RETURN возвращаемый
результат
Имеются четыре способа вызвать
функцию:
1. Присвоить возвращаемое
значение переменной. Например, следующая строка кода запоминает текущую
системную дату в переменной dToday:
dToday = DATE()
2. Включить вызов функции
в команду. Например, следующая команда устанавливает по умолчанию каталог,
имя которого возвращает функция GETDIR():
SET DEFAULT TO GETDIR()
3. Напечатать возвращаемое
значение в активное окно:
? TIME()
4. Вызвать функцию без запоминания
где-либо возвращаемого значения:
= SYS(2002)
Для прерывания выполнения
подпрограммы служит оператор RETURN [Expression | TO MASTER | TO ProgramName]
который возвращает управление в вызывающую программу, и в ней выполняется
следующая команда после вызывающей.
Если указана опция ТО
MASTER, то управление возвращается на самый верхний уровень вызывающей
программы, а эта же программа с опцией ТО ProgramName передает управление
в указанную программу. При использовании в функции команда автоматически
возвращает .Т. , если не указано другое выражение на месте Expression.
RETRY - действует
подобно команде RETURN, но при возвращении управления в вызывающую
программу повторяется выполнение последней команды.
Передача
аргументов
При создании процедуры или функции
можно ввести для них параметры, которые будут передаваться при вызове и
влиять на результат выполнения процедуры или функции.
В этом случае первой командой после ключевого слова
PROCEDURE или FUNCTION должна быть команда PARAMETERS список_параметров, параметры разделяются запятыми.
При вызове процедуры с параметрами
используется ключевое слово WITH:
DO имя_процедуры WITH список_параметров.
Передача аргументов возможна
двумя способами:
1. Передача по ссылке - в этом случае передаётся указатель
аргумента и при изменении его значения в процедуре или функции изменяется
значение в вызвавшей программе.
2. Передача по значению - в этом случае передаётся копия
аргумента и значение аргумента в вызвавшей подпрогамме не меняется.
По умолчанию в процедуру
аргументы передаются по ссылке. Для того, чтобы аргументы передавались
по значению, их заключают в круглые скобки ( ) в списке параметров. В функцию же по умолчанию происходит передача по значению. Чтобы изменить способ передачи аргументов в функцию используется команда
SET UDFPARMS TO VALUE | REFERENCE
Если указывается VALUE,
аргумент передаётся по значению, REFERENCE - по ссылке.