|
Вопрос # 15/ вопрос решён / |
|
Как в собственных функциях прописать необязательные для указания параметры?
 |
Вопрос задал: Ситников К.Е. (статус: Посетитель)
Вопрос отправлен: 19 мая 2006, 19:25
Состояние вопроса: решён, ответов: 6.
|
Ответ #1. Отвечает эксперт: Евгений В
function MyFunktion:integer;
var
//переменные
begin
//Выражение
end;
Если я правильно Вас понял...
 |
Ответ отправил: Евгений В (статус: 1-ый класс)
Время отправки: 19 мая 2006, 19:47
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Евгений Козаченко
Эти параметры называются парамеирами по умолчанию. Они должны быть расположены в конце списка параметров в таком виде:
<параметр>:<тип параметра>=значение по умолчанию
Например:
 |
Ответ отправил: Евгений Козаченко (статус: 2-ой класс)
Время отправки: 19 мая 2006, 19:56
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Мартемьянов А.Б.
Ясли я правильно понял вопрос, ты хочешь получить функцию наподобие Inc(), в которой может быть 1 или 2 параметра(для данного примера) (например, inc(i,2) или inc(i)).
Такие функции поддерживаются кажется начиная с Delphi 5. Называются они то-ли переопределяемые, то ли перегружаемые, точно не помню. Их суть такова:
Ты пишешь 2 или более одноименные функции(см.приложение). Далее при вызове ф-и increment если ты передаешь в нее 1 параметр- то выполняется первая функция, если передаешь 2 переметра- то выполняется вторая. Таким образом ты как бы получаешь функцию с необязательным (вторым) параметром
Приложение: Переключить в обычный режим- function increment(param1:integer):integer;
- begin
- result :=param1+1;
- end;
-
- function increment(param1,param2:integer):integer;
- begin
- result :=param1+param2;
- end;
-
-
 |
Ответ отправил: Мартемьянов А.Б. (статус: 1-ый класс)
Время отправки: 19 мая 2006, 22:21
Оценка за ответ: 5
|
Ответ #4. Отвечает эксперт: Матвеев Игорь Владимирович
Не слушай второй ответ - это совсем не то, это перегружаемые функции - т.е. название у функций одинаковые, а набор параметров может быть разным. Компилятор сам выберет нужную функцию.
Тебе нужно просто указать значение аргумента по-умолчанию, смотри приложение - параметр param2 можно не указывать - тогда в функции оно будет False.
Ответ #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 (статус: Посетитель), 12 мая 2012, 14:40 [#1]:
function MyFunction(a : integer := 0) : integer;//необязательный для указания параметр
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|