Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

5.8.3. Число переданных параметров

Функции

PARAMETERS( )

или

PCOUNT( )

возвращают число параметров, переданных программному компоненту.

Пример 1. Процедура SomeProc( ) сообщает число переданных ей параметров.

do SomeProc with 1, 2 && Сообщит: Число переданных параметров: 2

procedure SomeProc(p1, p2, p3)

gcMessage = 'Число переданных параметров: ' + Transform(Parameters( ))

wait window gcMessage

endProc

Пример 2 (приводится в справке VFP). Вычисляется средняя величина переданных функции числовых параметров.

gnAvg = GetAvg(10, 20, 30, 40)

? 'Среднее значение числовых параметров: ', gnAvg

function GetAvg

parameters gnPara1, gnPara2, gnPara3, gnPara4, ;

gnPara5, gnPara6, gnPara7, gnPara8, gnPara9

if Pcount( ) = 0 then

return 0

endif

gnResult = 0

numberOfNumericParameters = 0 && Число числовых параметров

for gnCount = 1 to Pcount( )

&& Формируем имя параметра

gcCompare = 'gnPara' + Transform(gnCount)

&& Получаем его значение

pValue = Evaluate(gcCompare)

&& Проверяем тип параметра

if VarType(pValue) = 'N' then

numberOfNumericParameters = numberOfNumericParameters + 1

gnResult = gnResult + pValue

endif

endFor

&& Формируем и возвращаем результат

if numberOfNumericParameters > 0 then

return gnResult / numberOfNumericParameters

else

return 'Нет числовых параметров!'

endif

endFunc

5.8.4. Передача параметров по значению и ссылке

По умолчанию параметры, указанные в опции WITH команды DO, передаются по ссылке, а при вызове программного компонента как функции – по значению. Например:

do d:\Output with x, y && Параметры x и y передаются по ссылке

Swap(x, y) && Параметры x и y передаются по значению

Передача по значению употребляется, когда параметры используются как входные и когда не нужно возвращать в вызывающую процедуру их новые значения. Если же параметры являются выходными (или одновременно и входными и выходными), то они должны быть переданы по ссылке.

Команда

SET UDFPARMS TO VALUE | REFERENCE

задает способ передачи параметров программному компоненту.

Опции:

VALUE – параметры-переменные передаются по значению. При передачи параметра по значению фактический параметр остается неизмененным, даже если выполнено изменение соответствующего формального параметра.

REFERENCE – параметры-переменные передаются по ссылке. При передачи параметра по ссылке фактический параметр принимает значение формального параметра.

Всегда по значению передаются константы и элементы массивов.

Независимо от установки SET UDFPARMS параметр, заключенный в скобки, передается по значению, а предваренный символом @ – по ссылке.

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

Пример 1. Процедура SWAP( ) выполняет обмен значений двух своих параметров.

local x, y

store 25 to x

store –30 to y

&& Параметры будут передаваться по значению

set udfparms to value

swap(x, y) && Нет обмена

? x, y && Напечатает: 25 –30

&& Параметры будут передаваться по ссылке

set udfparms to reference

? x, y && Напечатает: 25 –30

Swap(x, y) && Есть обмен

? x, y && Напечатает: –30 25

procedure Swap(a, b)

local hold

hold = a

a = b

b = hold

endProc

Пример 2. Использование символа @ и круглых скобок при передачи параметров.

local x, y

store 25 to x

store –30 to y

set udfparms to value

? x, y && Напечатает: 25 –30

&& Оба параметра передаются по ссылке

Swap(@x, @y)

? x, y && Напечатает: –30 25

&& Первый параметр передается по ссылке, второй – по значению

Swap(@x, (y))

? x, y && Напечатает: 25 25

procedure Swap(a, b)

&& Текст процедуры Swap( ) см. выше

…

endProc

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]