Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Процедуры с необязательными параметрами


Автор: icepro 6.11.2007, 17:03
Как создать сабж.... То есть создать процедуру в параметрах которой можно указывать не все параметры...

Автор: skyboy 6.11.2007, 17:10
решений два.
первое: перезагрузка.
т.е. реально создаешь количество функций равное количеству разнообразных параметров:
Код

function some(x: integer): integer; overload;
begin
 result:= x * x;
end;

function some: integer; overload;
begin
 result:= some(5);
end;

недостаток: 
  • надо продумать самому все желаемые варианты сочетаний параметров.
  • надо создать соотвествующее количество функций(впрочем, никто не мешает из одной функции вызывать другую, но с другим набором аргментов)
  • механизм в первую очередь был расчитан на создание функций с набором аргументов разного типа, потому это то же самое, что из пушки - по воробьям.
достоинство: гибкость, хотя и спорный аргумент(представь себе 5 аргументов, из которых надо 4 сделать необязательными).
---
второе решение: параметры по умолчанию.
реализуются через "=<значение>"
Код

function some(x: integer= 5): integer;
begin
 result:= x * x;
end;

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

Автор: ivan219 6.11.2007, 17:36
Цитата(skyboy @  6.11.2007,  17:10 Найти цитируемый пост)
перезагрузка

 smile 
Как вареант массив пораметров:
Код

procedure a(Ar: Array of Integer);

но опятже смотря для каких целей так как в самой процедуре нужно будет разбиратся какой пораметр для чего нужен.
Из '+' неограниченное число пораметров.
Из '-' нужно хорошенько подумать.

Автор: MetalFan 6.11.2007, 18:51
еще можно упомянуть про Default параметры...
Код

interface
...
  procedure SomeFunc( AParam1: Integer; AParam2: Integer = -1 ):
...
implementation
  
...
  SomeFunc( 10, 10);
  SomeFunc( 10 );
...
 


Добавлено через 40 секунд
упс, skyboy уже упомянул)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)