Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

список процедур


Страницы:   1 2

Handle ©   (2011-10-14 16:27:00) 

есть несколько процедур без параметров ProcA, ProcB, ..., ProcZ. Нужно запихнуть их в список и вызывать из списка. Как это делается?


procedure ProcA;
begin
 ShowMessage('A');
end;

procedure ProcB;
begin
 ShowMessage('B');
end;

procedure ProcC;
begin
 ShowMessage('C');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 I: Integer;
 ProcList: TList;
begin
 ProcList := TList.Create;
 try
   ProcList.Add(@ProcA);
   ProcList.Add(@ProcB);
   ProcList.Add(@ProcC);
   for I := 0 to ProcList.Count - 1 do
     ProcList[I];
 finally
   ProcList.Free;
 end;
end;


Sha   (2011-10-17 11:40:00) [1]

У меня ваще крамольная мысль имеется:

UnitName.ProcName(Object, Param) не хуже Object.ProcName(Param)


DVM   (2011-10-17 11:39:00) [2]


> OW ©   (17.10.11 11:20) [36]


> strict private и strict protected - дык, не юзай (сам же)
> где не надо, да и все

Нееее. Особенно strict private имхо очень полезная штука. Иногда когда классы в одном модуле и они по умолчанию дружественные, то при обращении из одного класса к свойствам другого иногда случайно (дополнение кода подсказывает не то что хотел)  вместо свойства вставляется приватное поле класса. И все вобщем то работает, пока классы вдруг не понадобится разнести по разным модулям или защитить поле критической секцией. Да и вообще для подержания принципа строгой инкапсуляции полезно. Теперь всегда ставлю strict.


DVM   (2011-10-17 11:34:00) [3]


> DiamondShark ©   (17.10.11 10:44) [35]


> Т.е. методом он является чисто синтаксически. Возникает
> резонный вопрос: а нафига?

А пёс его знает. Для того чтобы не болтались в коде свободные функции и процедуры. Для более строгой организации всего и вся в пространства имен.


Ega23   (2011-10-17 11:32:00) [4]


> Да и выглядит старый способ( явное приведение, например,
>  )  все же гораздо понятнее. К тому же, он явно показывает,
>  что хотел программист. И просмотреть его подругому сложно.


Ой не скажи... Я точно такую же позицию занимал, пока активно использовать не начал. Нереально удобно.


OW   (2011-10-17 11:20:00) [5]

втиснусь.
полувопрос-полумысль

может быть удобнее стало, может быть (да, наверняка) что-то не понимаю, но все эти нововведения или реализуемы руками, или хуже выглядят.(ну а некоторые, строго имхо, совсем незачем.
Финальные методы класса - какой смысл? Зачем тогда класс вообще?
strict private и strict protected - дык, не юзай (сам же) где не надо, да и все
класс-в-класс - вообще не понятно, а до этого, что, не было что ли..  ALines содержит FLines, да сколько угодно.
ну и по списку
)

Да и выглядит старый способ( явное приведение, например, )  все же гораздо понятнее. К тому же, он явно показывает, что хотел программист. И просмотреть его подругому сложно.

только
> Class Helpers
представляется удобной штукой :)


DiamondShark   (2011-10-17 10:44:00) [6]


> Для статического классового метода (Из новых версий Delphi)
> такого параметра нет, что делает, например, возможным передавать
> такой метод в качестве функции обратного вызова в WinAPI.

Т.е. методом он является чисто синтаксически. Возникает резонный вопрос: а нафига?


Sha   (2011-10-16 18:29:00) [7]

DVM ©   (16.10.11 16:45) [28]

студента жалко


DVM   (2011-10-16 17:56:00) [8]


> Юрий Зотов ©   (16.10.11 17:51) [32]


> class procedure (function) - разве это не тот же самый статический
> метод, по сути своей?

Нет это не одно и то же.

Просто классовый метод (который есть в Delphi 7) имеет неявный скрытый параметр, в котором передаётся указатель на класс и классовый метод может использовать информацию о классе. Для статического классового метода (Из новых версий Delphi) такого параметра нет, что делает, например, возможным передавать такой метод в качестве функции обратного вызова в WinAPI.


Юрий Зотов   (2011-10-16 17:51:00) [9]

> DVM ©   (16.10.11 17:46) [31]

> Были классы с абстрактным конструктором. Не со всем то же
> самое, но на практике результат давали тот же.

Не совсем так. Абстрактным назывался просто класс, содержащий хотя бы один абстрактный метод. Любой.

> А вот про статические методы класса я не совсем понял. Что
> под этим подразумеваешь из того что было до введения ключевого
> слова static ?

class procedure (function) - разве это не тот же самый статический метод, по сути своей?


DVM   (2011-10-16 17:46:00) [10]


> Юрий Зотов ©   (16.10.11 17:20) [30]


> понятия абстрактных классов и статических методов существовали
> и в D7, и даже раньше

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

А вот про статические методы класса я не совсем понял. Что под этим подразумеваешь из того что было до введения ключевого слова static ?


Юрий Зотов   (2011-10-16 17:20:00) [11]

Так значит, начиная все же не с D7, а позже. А то я уж было испугался.
:o)
Правда, справедливости ради надо заметить, что понятия абстрактных классов и статических методов существовали и в D7, и даже раньше. То, что они в явном виде так не назывались, сути не меняет.


Ega23   (2011-10-16 17:07:00) [12]


> это только часть, то что вспомнил.


Анонимные методы, весьма мощный RTTI, а также довольно поганый фреймворк для юнит-тестирования.


DVM   (2011-10-16 16:45:00) [13]


> Юрий Зотов ©   (16.10.11 16:07) [26]

изменения были и раньше, но никогда ранее имхо их не было столько. Например, новшества не самой последней D2010 по сравнению с D7:

strict private
Inline
перегрузки операторов
Class Helpers
записи-объекты
абстрактные классы
sealed классы
Классовые константы
Классовые переменные
Вложенные классы
Финальные методы класса
Статические методы класса
for-element-in-collection
Динамическая инициализация массивов
Дженерики
Unicode

это только часть, то что вспомнил.

Конечно, часть этого можно назвать синтаксическим сахаром, обойтись без которого конечно можно, дань моде и попытка угнаться за с#, но оно есть и почему бы это не использовать.

Почему попытка создать программу с развитым интерфейсом исключительно на WinAPI вызывает недоумение, а использование новых возможностей экономящих время (дженерики) вызывает странные язвительные замечания?


DVM   (2011-10-16 16:25:00) [14]


> Юрий Зотов ©   (16.10.11 16:07) [26]


> Именно с D7 ?

D7 - это своего рода рода рубеж, на котором остановились познания многих (и пишуших и не пишущих на Delphi) о языке Delphi.


Юрий Зотов   (2011-10-16 16:07:00) [15]

> DVM ©   (16.10.11 13:25) [24]
> Начиная с D7 в языке произошло много нововведений.

Именно с D7 ?


Ega23   (2011-10-16 14:35:00) [16]


>  делающих код программы чище и понятнее хотя бы.


И не только.
Например, недавно для себя нашёл одно интересное применение хелперов, для "тестирования". Есть класс, есть у него метод. Есть куча вызовов данного метода данного класса. Но вот поведение его что-то не нравится. Надо бы данный метод переделать малость и сравнить, как лучше.


DVM   (2011-10-16 13:25:00) [17]


> Юрий Зотов ©   (15.10.11 20:53) [8]
>
> > bems   (15.10.11 20:17) [6]
>
> Важнейшее расширение языка. И как мы раньше без него обходились.
> ..
>
>

Хреново обходились. Каждый раз для создания списка из элементов нового типа приходилось делать тупую рутинную работу. И не только для списков.

Начиная с D7 в языке произошло много нововведений. Нужность и полезность их спорна и неочевидна для многих, тут как говорится на вкус и цвет товарищей нет, но большинство об этих нововведениях просто не знают и не используют. А использование их кем то другим принмают в штыки, так как для них самих такой стиль непривычен. Аргументируют обычно тем, что в D7 это не скомпилируется, даже если работа будет вестись исключительно под XE.

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


Юрий Зотов   (2011-10-16 00:56:00) [18]


> bems   (16.10.11 00:33) [20]
> И всё это время Вы сам пишете код? Вы наверное учень увлеченный
> человек

Возможно. Хотя, конечно, я пишу не только код (да и расточительно было бы использовать человека с 40-летним опытом программизма в качестве всего лишь кодера). Просто предпочитаю делать всю задачу сам, начиная с разговоров с заказчиком и кончая кодингом.


bems   (2011-10-16 00:46:00) [19]

Нет, я просто восхищаюсь.
Спасибо, кажется мы всё выяснили.
Покидаю тред.


Игорь Шевченко   (2011-10-16 00:42:00) [20]


> И всё это время Вы сам пишете код? Вы наверное учень увлеченный
> человек


вы предлагаете его диктовать секретарям ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо