14.4.3 Выходные (Out) параметры

На верх  Назад  Вперёд

Out параметры (выходные параметры) объявляются следующим образом:


Out параметры

1406


Out параметр предназначен что-бы передавать значения обратно из функции: значение передается по ссылке. Начальное значение параметра отбрасывается, и не может использоваться.

Если переменная нужна для передачи данных в функцию и получения их из функции, то необходимо использовать параметр-переменную. Если нужно только извлечь значение может быть использован out-параметр.

Само собой разумеется, значения по умолчанию не поддерживаются для out-параметров.

Отличие out параметров от параметров переданных по ссылке (var и const) очень мала (про управляемые типы смотри ниже): out параметр дает информацию о том, что будет с аргументам при передаче в процедуры: коммилятор знает, что переменная не должна быть инициализированы перед вызовом. Следующий пример иллюстрирует это:

Procedure DoA(Var A : Integer);

begin

A:=2;

Writeln('A содержит ',A);

end;

 

Procedure DoB(Out B : Integer);

begin

B:=2;

Writeln('B содержит',B);

end;

 

Var

C,D : Integer;

begin

DoA(C);

DoB(D);

end.

Процедуры DoA и DoB  делают одно и то же. Но объявление DoB дает больше информации для компилятора, что позволяет ему обнаружить, что D не должна быть инициализирована до вызова. В то время как параметр А в DoA может принимать и возвращать значения, компилятор замечает, что C не инициализирована до вызова процедуры DoA.

home: >fpc -S2 -vwhn testo.pp
testo.pp(19,8) Hint: Variable "C" does not seem to be initialized
testo.pp(19,8) Подсказка: Переменная "C", кажется, не быть инициализирована

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

Примечание:

Out параметры поддерживаются только в режимах Delphi и ObjFPC. Для других режимов out тоже является допустимым идентификатором.

Примечание:

Для управляемых типов (подсчет ссылок), несет некоторые накладные расходы при использовании Out параметров: компилятор должен быть уверен, что значения инициализированы правильно (т.е. имеет счетчик ссылок отличный от ноля (0)). Эта инициализация обычно производится вызывающей стороной.