Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 15

/ вопрос решён /

Как в собственных функциях прописать необязательные для указания параметры?

Ситников К.Е. Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ситников К.Е. (статус: Посетитель)
Вопрос отправлен: 19 мая 2006, 19:25
Состояние вопроса: решён, ответов: 6.

Ответ #1. Отвечает эксперт: Евгений В

function MyFunktion:integer;
var
//переменные
begin
//Выражение
end;
Если я правильно Вас понял...

Ответ отправил: Евгений В (статус: 1-ый класс)
Время отправки: 19 мая 2006, 19:47
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Евгений Козаченко

Эти параметры называются парамеирами по умолчанию. Они должны быть расположены в конце списка параметров в таком виде:
<параметр>:<тип параметра>=значение по умолчанию
Например:

Приложение:
  1. function abc(a:string;b:string;c:string='!!!'):boolean;


Ответ отправил: Евгений Козаченко (статус: 2-ой класс)
Время отправки: 19 мая 2006, 19:56
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Мартемьянов А.Б.

Ясли я правильно понял вопрос, ты хочешь получить функцию наподобие Inc(), в которой может быть 1 или 2 параметра(для данного примера) (например, inc(i,2) или inc(i)).
Такие функции поддерживаются кажется начиная с Delphi 5. Называются они то-ли переопределяемые, то ли перегружаемые, точно не помню. Их суть такова:
Ты пишешь 2 или более одноименные функции(см.приложение). Далее при вызове ф-и increment если ты передаешь в нее 1 параметр- то выполняется первая функция, если передаешь 2 переметра- то выполняется вторая. Таким образом ты как бы получаешь функцию с необязательным (вторым) параметром

Приложение:
  1. function increment(param1:integer):integer;
  2. begin
  3. result :=param1+1;
  4. end;
  5.  
  6. function increment(param1,param2:integer):integer;
  7. begin
  8. result :=param1+param2;
  9. end;
  10.  
  11.  


Ответ отправил: Мартемьянов А.Б. (статус: 1-ый класс)
Время отправки: 19 мая 2006, 22:21
Оценка за ответ: 5

Ответ #4. Отвечает эксперт: Матвеев Игорь Владимирович

Не слушай второй ответ - это совсем не то, это перегружаемые функции - т.е. название у функций одинаковые, а набор параметров может быть разным. Компилятор сам выберет нужную функцию.

Тебе нужно просто указать значение аргумента по-умолчанию, смотри приложение - параметр param2 можно не указывать - тогда в функции оно будет False.

Приложение:
  1. function MyFunc(param1: integer; param2: boolean = False): Boolean;
  2. begin
  3. // ***
  4. end;


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 20 мая 2006, 04:26
Оценка за ответ: 5

Ответ #5. Отвечает эксперт: Вадим К

Есть один важный момент в этих способах задания функций. Нужно писать так, что бы компилятор всегда мог "угадать", какую функцию вызвать.
К примеру я могу объявить две функции вида
function xxx(a:byte=1;b:real=3):boolean;overload;
function xxx(a:integer=1):boolean;overload;
Если вызвать функцию без параметров, то компилятор будет ругаться.overload - ето указание компилятору, что я создаю перегруженую функцию.
И второй важный момент, параметры по умолчанию должны быть справа в объявлении функции.
тоесть, приведённое ниже - недопустимо
function d(a:integer=1;b:real):boolean;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 22 мая 2006, 11:32

Ответ #6. Отвечает эксперт: Darya Ermakova

Нужно задать этим параметрам значение при объявлении функции. Например так:
procedure MessageShow(s2: string; s1: string = 'Hello');
begin
ShowMessage(s1+s2);
end;

Тогда при вызове процедуры можно задать значение только s2:
MessageShow(' there');

Ответ отправила: Darya Ermakova (статус: 8-ой класс)
Время отправки: 22 мая 2006, 12:26


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 12 мая 2012, 14:40; участников в обсуждении: 1.

31 января 2011, 19:56: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Phantom

Phantom (статус: Посетитель), 12 мая 2012, 14:40 [#1]:

function MyFunction(a : integer := 0) : integer;//необязательный для указания параметр

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.