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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2011, 06:01   #11
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

GunSmoker можно пример какой нить? простой а то бывало функций сам много пишешь и нужно пользоваться такмим методом, и не получаеться
cargo29 вне форума Ответить с цитированием
Старый 10.08.2011, 06:52   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Пример можно.

Чего конкретно? Всё подряд писать лениво.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 10.08.2011, 07:19   #13
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

вот например как осуществить такое?

Код:
function test(a:string = 'qwerty'; i:integer = 9; t:string):string;
begin
redult:=a+inttostr(i)+t;
end;
cargo29 вне форума Ответить с цитированием
Старый 10.08.2011, 07:31   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Наводящий вопрос:

Код:
function Funcenstein(A: Integer = 3; B: Integer = 3; C: Integer = 3);

...

Funcenstein(3, 3); // <- вызвали вы A + B, B + C или A + C?
Понятно, откуда ограничение? То, что вы хотите в явном виде - невозможно. Потому что получается неоднозначность, как трактовать вызов.

Я привёл варианты альтернатив.

К примеру, вариант с overload-ми - делается один основной вариант функции со всеми параметрами. Можно некоторые параметры сделать умалчиваемыми. Затем, делаются несколько overload вариантов, в которых параметры указаны в альтернативном порядке. Все альтернативные варианты являются dummy-заглушками и просто вызывают основной вариант функции.

Этот метод применим только если есть возможность опознать параметры по типу.

К примеру, для вашего примера:

Код:
function test(a:string; i:integer; t: string): string; overload;
begin
  result:=a+inttostr(i)+t;
end;

function test(t: string):string; overload;
begin
  Result := test('qwerty', 9, t);
end; 

function test(a, t: string):string; overload;
begin
  Result := test(a, 9, t);
end;

function test(i: integer; t: string):string; overload;
begin
  Result := test('qwerty', i, t);
end;

Но нельзя:
function test(a: string):string; overload;
т.к. конфликтует с test(t: string) выше
Это лишь один из возможных вариантов. А вообще можно придумать 1000 и одно решение.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 10.08.2011, 07:47   #15
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Ага )) спасибо буду разбираться
cargo29 вне форума Ответить с цитированием
Старый 10.08.2011, 08:30   #16
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Функция имеет необязательные параметры, поэтому если передавать нечего, то писать null, null не надо.
Код:
begin
  test()
end
Речь идёт о языке Object Pascal, поэтому:
1. Не null, а nil
2. если подпрограмма не имеет параметров, то после неё не надо указывать пустые скобки, то есть:

Объявление
Код:
function SomeFunc: SomeType;
begin
// Тут шота делаема, насяльника
end;
Обращение:
Код:
var a: SomeType; // Совместимый тип с функцией SomeType
begin
//....
a:=SomeFunc;
//...
end;
//...
Вадим Мошев вне форума Ответить с цитированием
Старый 10.08.2011, 09:27   #17
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Вадим Мошев я пробовал nil ошибка выскакивает

вот например эта процедура
Код:
procedure test(a:integer = 1; b:string = 'test');
begin
 ShowMessage(IntToStr(a)+b);
end;
Попробуйте заменить первый парамтр на nil
cargo29 вне форума Ответить с цитированием
Старый 10.08.2011, 10:48   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
2. если подпрограмма не имеет параметров, то после неё не надо указывать пустые скобки, то есть:
это по желанию.
Цитата:
1. Не null, а nil
только для объектов и указателей это применимо.

ТС, вам же уже говорили что пропускать можно только с конца.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2011, 11:04   #19
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Речь идёт о языке Object Pascal, поэтому:
1. Не null, а nil
2. если подпрограмма не имеет параметров, то после неё не надо указывать пустые скобки
Вадим, я эти null увидел на скрине, потому и написал. Но и nil писать нельзя. На счёт скобок - ни не надо, а не обязательно. Если написать test(), то сразу видно что функция, а если просто test, то визуально это не заметно. Иногда это надо, иногда нет.
eoln вне форума Ответить с цитированием
Старый 10.08.2011, 11:34   #20
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Эх проще говоря то, что я хотел, не сделать просто.. overload тоже не сильно походит что бы потом каждую функцию расписывать ... вот еще вопрос сразу по функциям,


хотел написать процедуру но она почему то не работает (код писал тут извиняюсь за ошибки если есть)




Код:
proocedure test (url:string; http:Tidhttp; ing:Timage);
var
ms:TmemoryStream;
begin
ms:=tmemorystream.create;
http.get(url, ms);
ms.safetofile('pict.jpg');
img.picture.loadfromfile('pict.jpg');
ms.free;
end;
на форме есть эти компоненты и в uses jpeg есть
cargo29 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование процедур и функций nelly.nelly Помощь студентам 1 23.02.2011 15:54
Использование процедур и функций Сергей Игоревич Помощь студентам 3 16.02.2011 09:29
использование процедур и функций! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 15:33
Глобальность функций и процедур rivers Общие вопросы Delphi 5 01.08.2008 20:35
Параметры процедур и функций shurik_7866 Общие вопросы Delphi 8 10.12.2007 19:49