Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Процедурные типы на Паскале

Как ими пользоваться и какая от них польза???
Номер выпуска : 3197
Возраст листа : 257 (дней)
Количество подписчиков : 416
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/162803
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Руслан Sat, 5 Jun 2004 09:06:20 +0400 (#162803)

 

Ответы:

Тема: Процедурные типы на Паскале

Применение им большое и польза огромная. Можно передать в процедуру имя другой
процедуры или
функции и каждый раз разную . Будут выполняться одинаковые действия с разными
процедурами.
Позднее был разработан более мощный метод в рамках объектно-ориентированного
программирования,
но процедурные типы он не заменил.

Могу показать фокус:
program Show;
var
SaveExit: Pointer;

procedure MyExit; far;
begin
WriteLn('Обратите внимание, что прямого вызова этой процедуры нет');
WriteLn('А получается, что есть');
ExitProc:=SaveExit;
end;

BEGIN
SaveExit:=ExitProc;
ExitProc:=@MyExit;
END.
А подробнее, смотрите в учебниках (мне учебник Немнюгина нравится) или на сайте,
посвященном Паскалю:
http://www.borlpasc.narod.ru/index.htm

Ответить   Sat, 5 Jun 2004 19:17:08 +0400 (#162834)

 

Hello, Руслан.

Также, как и обычными.
Польза есть. Пример:
У тебя есть какой-то объект, который в зависимости от его состояния
при вызове функции Do(I: integer) должен что-то сделать (скажем,
посчлитать I в квадрате или же факториал от I)
Можно, кончено завести булевую переменную и сделать IF. Но красивее
будет сделать 2 private - функции FuncSQRT(I: Integer) и FuncFact(I:
integer).
И определить Public-переменнкю - функцию (ну скажем Func).
Теперь в SetState(State: boolean) (пофиг как назовём) пишем:

If State then Func := FuncSQRT eles Func := FuncFact;

Теперь в любом месте проги можно просто вызывать Func.

Это удобно, и к тому же работает быстрее, чем If.

<<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<
Подумай, а уж после совершай необдуманный шаг

Ответить   "B." Sat, 5 Jun 2004 19:18:27 +0400 (#162837)