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


Автор: mspuz 1.3.2006, 10:50
Во многих языках программирования есть часть функций, которые имеют параметры, которые необязательно указывать в конкретно взятой ситуации. В описаниях они часто обазначаются в квадратных скобках. А как создать такой параметр в своей функции??? Т.е. я могу указать его значение, а могу просто ничего не указывать. И если это возможно, то как в самой функции отслеживать, что количество параметров уменьшилось???

Автор: Snowy 1.3.2006, 11:06
Код
  procedure MyProc(param1: string; param2: integer; param3: boolean = true; param4: string = 'строка');
Здесь параметры 3 и 4 необязательны.

Автор: Slaad 1.3.2006, 11:56
И обязательное требование, чтобы инициализированные параметры всегда были в конце.

Автор: Snowy 1.3.2006, 12:11
Также можно сделать переменное кол-во параметров на основе массивов.
Вот пример, как это делается:
http://forum.vingrad.ru/index.php?showtopic=83441&view=findpost&p=643498
Добавлено @ 12:12
Это на случай, когда переменное количество должно быть в любом месте.

Автор: mspuz 1.3.2006, 13:33
Snowy, А как для функции будет, как мне написать такой вот пример:
function MyF(Kolvo:Integer; MyMas: array of String = []):Integer;
Выдает ошибку, что для данного параметра нельзя устанавливать значение по умолчанию. Т.е. для дин. массива такое не прокатит???

Автор: Snowy 1.3.2006, 13:38
Код

function MyF(Kolvo:Integer; MyMas: array of String):Integer;
По умолчанию он и так пустой.
Добавлено @ 13:39
Ты уж определись, что ты будешь использовать.
Второй и третий вариант несовместимы.

Автор: mspuz 1.3.2006, 13:49
Snowy, Мне нужно, чтобы можно было не задавать второй параметр (MyMas), если он не требуется, т.е. написать:

MyF(2); - не нужен

или

MyF(2,['1','2','3']); - нужен

Автор: Snowy 1.3.2006, 13:56
Тогда используй в комбинации с первым вариантом:
Код

  function MyF(Kolvo:Integer; MyMas: array of String):Integer; overload;
  function MyF(Kolvo:Integer):Integer; overload

.....

implementation

function MyF(Kolvo:Integer; MyMas: array of String):Integer;
begin
  ....
end;

function MyF(Kolvo:Integer):Integer;
begin
  MyF(Kolvo, []);
end;

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