18th
Июн

Целесообразность применения out

Posted by bullvinkle under Пост-обзор

Для объявления выходных параметров служит ключевое слово out:

Код:

procedure GetScreenResolution(out Width, Height: Integer);
begin
  Width := GetScreenWidth;
  Height := GetScreenHeight;
end;

Установка значений выходных параметров внутри подпрограммы приводит к установке значений переменных, переданных в качестве аргументов:

Код:

var
  W, H: Integer;
begin
  GetScreenResolution(W, H);
  ...
end;

После вызова процедуры GetScreenResolution переменные W и H будут содержать значения, которые были присвоены формальным параметрам Width и Height соответственно.
Если параметр является одновременно и входным, и выходным, то он описывается с ключевым словом var:
procedure Exchange(var A, B: Integer);

Код:

var
  C: Integer;
begin
  C := A;
  A := B;
  B := C;
end;

Изменение значений var-параметров внутри подпрограммы приводит к изменению значений переменных, переданных в качестве аргументов:

Код:

var
  X, Y: Integer;
begin
  X := 5;
  Y := 10;
  ...
  Exchange(X, Y);
  // Теперь X = 10, Y = 5
  ...
end;

При вызове подпрограмм на место out- и var-параметров можно подставлять только переменные, но не константы и не выражения.
Если при описании параметра не указано ни одно из ключевых слов const, out, или var, то параметр считается входным, его можно изменять, но все изменения не влияют на фактический аргумент, поскольку они выполняются с копией аргумента, создаваемой на время работы подпрограммы. При вызове подпрограммы на месте такого параметра можно использовать константы и выражения. Пример подпрограммы:
f

Код:

unction NumberOfSetBits(A: Cardinal): Byte;
begin
  Result := 0;
  while A <> 0 do
  begin
    Result := Result + (A mod 2);
    A := A div 2;
  end;
end;

Параметр A в приведенной функции является входным, но при этом он используется в качестве локальной переменной для хранения промежуточных данных.
PS ну а теперь сами подумайте где это можно применить
Тема на форуме.

Похожие статьи

Теги: |