Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 21:02   #1
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию Целесообразность применения out

Здравствуйте.
Хотелось бы узнать о целесообразности применения out в процедурах и функциях. На сколько я понимаю параметр объявленный с помощью out не возможно присвоить другим переменным (если я конечно не ошибаюсь), чего нельзя сказать о параметре объявленном с помощью var. Если вы знаете что либо о преимуществах или недостатках использования этой директивы - напишите об этом здесь. Благодарю за внимание.
Miha85193 вне форума Ответить с цитированием
Старый 18.06.2010, 10:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
На сколько я понимаю параметр объявленный с помощью out не возможно присвоить другим переменным
out параметр отличается от var параметра тем что когда вызывается процедура, с таким параметром, переменная переданная по нему очищается от значений. Обнуляется, опустевает называй как хочешь.
Целесообразность его применения в том что эта переменная сама инициализируется, убирается из нее мусор, в то время как var параметр не изменяет своего содержимого.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2010, 10:30   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Мальца теории
Для объявления выходных параметров служит ключевое слово 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 ну а теперь сами подумайте где это можно применить
SERG1980 вне форума Ответить с цитированием
Старый 18.06.2010, 20:50   #4
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Спасибо. Теперь мне более-менее понятно где можно применить out. Исходя из моего опыта эта детектива встречается достаточно редко и поэтому эта тема будет полезна не только мне.

Еще хотелось бы узнать бывают ли ошибки связанные с использованием этой директивы и если бывают то какие. Еще раз спасибо.
Miha85193 вне форума Ответить с цитированием
Старый 18.06.2010, 21:00   #5
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Спасибо. Теперь мне более-менее понятно где можно применить out. Исходя из моего опыта эта директива встречается довольно редко, так что я думаю эта тема будет полезна не только мне.

Еще хотелось бы узнать бывают ли ошибки, связанные с использованием этой директивы и если бывают то какие. Еще раз большое спасибо.
Miha85193 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите обосновать применения метода наименьших квадратов при обработке многолетних рядов Алексей DFG Помощь студентам 1 12.12.2009 20:06
Возможна ли функция Include без применения PHP? Igor Bely HTML и CSS 2 07.01.2009 14:58
организовать тест с рандомовским выбором без применения массивов/ VBA АнНютик Помощь студентам 6 22.12.2008 22:18
Область применения переменных ixs Общие вопросы Delphi 2 05.06.2008 18:00