ppvlad
Основа форума
Карма +460/-0
Offline
Пол:
Сообщений: 493
Москва (ЮВАО) / Брянск (32)
2126-020 УЗАМ1700 Солекс073 БСЗ Плаза
|
|
« Ответ #30 : 04 Июля 2005, 09:06:34 » |
|
"Вот вас-то как раз и надо расстрелять"
полностью не согласен, деструктор TCustomForm вполне отдаёт себе отчёт в этой ситуации и ничего страшного для дальнейшего вызова Free не оставляет, поэтому ни к каким жутким последствиям этот код не приводит, хотя как я сказал и не делает чести программеру.
такой код (именно из-за своей безобидности) очень легко "забыть" в большом проекте, например сначала девелопер писал Action := caFree а потом решил, что это лишний морок и стал писать что-то вида:
with Form.Create(Application) do try ShowModal; finally Free end;
а про "то" присваивание начисто забыл - ну и что?
спорить я с вами и не собираюсь, мой код вы не видели, поэтому гнать волну не надо, я слёгкостью выпотрошу ваш код, потому что для любой задачи есть большое количество решений и говорить что одно лучше другого при отсутствии катастрофических ошибок это вопрос риторики не имеющей отношения к теме кривизны софта.
я вообще не увидел в вашем посте ничего кроме стона души - соответственно и моё восприятие его, я просто не вижу предмета для спора.
|
|
|
Записан
|
|
|
|
sf
Гость
|
|
« Ответ #31 : 04 Июля 2005, 21:33:06 » |
|
Оригинальное сообщени от ppvlad полностью не согласен, деструктор TCustomForm вполне отдаёт себе отчёт в этой ситуации и ничего страшного для дальнейшего вызова Free не оставляет, поэтому ни к каким жутким последствиям этот код не приводит
Ну что ж, цитируем VCL: procedure TCustomForm.CloseModal; ... begin ... case CloseAction of caNone: ModalResult := 0; caFree: Release; end; end; procedure TCustomForm.Release; begin PostMessage(Handle, CM_RELEASE, 0, 0); end; procedure TCustomForm.CMRelease; begin Free; end; т.е. после всего вышеизложенного вы хотите сказать, что экземпляр объекта TForm все еще является действительным, и повторный вызов Free ни к чему плохому привести не может?
|
|
|
Записан
|
|
|
|
ppvlad
Основа форума
Карма +460/-0
Offline
Пол:
Сообщений: 493
Москва (ЮВАО) / Брянск (32)
2126-020 УЗАМ1700 Солекс073 БСЗ Плаза
|
|
« Ответ #32 : 05 Июля 2005, 08:34:37 » |
|
Я утверждаю, что приведён пример работоспособного кода не вызывающего ошибок, мало того, ваша готовность стреляться по этому поводу побудила меня набросать пример (мало ли, вдруг я чего на старости лет упустил...).
пример, разумеется, подтвердил безопасность этого кода (что в принципе было понятно и без него). я повторяю - работоспособность и безопасность, а не разумность или неизбыточность.
не стану вдаваться в полный код, но всё наверняка понятно и так:
procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(Application) do try ShowModal; finally Free; end; end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
пример работает нормально под D5 и D7 (не стану зуб давать за более ранние версии - лень ставить, чтобы просто проверить)
а если вы, sf, утверждаете обратное - приведите код генерирующий ошибку, потому что голословного "может вызывать" недостаточно - факты в студию, если дело дошло до пистолетов.
я с вашего позволения приведу таковой (но ведь речь не шла о коде вообще - речь шла о конкретном коде, который, повторяю, безопасен)
procedure TForm1.Button1Click(Sender: TObject); begin with TForm2.Create(Application) do try ShowModal; Application.ProcessMessages; finally Free; end; end;
вот тут действительно будут грабли, но эти грабли выявятся на первом же прогоне, что, естественно, несмертельно (повторяю, речь не шла о коде вообще - то есть приведённый пример некорректен).
вообще Action := caFree практика порочная и я по этому поводу не спорю, естественно если программер пишет так постоянно, то его надо слегка подравнять, но если это просто разовый ляп - простить можно, ляп вполне объяснимый.
|
|
|
Записан
|
|
|
|
sf
Гость
|
|
« Ответ #33 : 05 Июля 2005, 14:14:54 » |
|
2 ppvlad: Согласен по поводу того, что если добавить Application.ProcessMessages (PostMessage наконец-то отработало), то глюки точно обеспечены. Пример, который я привел - упрощенный вариант того, что видел я в чужом коде (от двух разных т.н. разработчиков). И вопрос ко мне одного из них был такой - что глючит? Проблема то именно в том, что народ, когда пишет софт мало себе представляет, что происходит "за кадром", т.е. в частности в VCL. Исходники то лень смотреть. Или даже есть категория программистов, которые чужой код не читают принципиально. Чукча не читатель, чукча писатель Предлагаю завершить наш спор по поводу данного исходника (посыпаю голову пеплом, за не очень корректный пример) и рассмотреть что-нибудь другое.
|
|
|
Записан
|
|
|
|
ppvlad
Основа форума
Карма +460/-0
Offline
Пол:
Сообщений: 493
Москва (ЮВАО) / Брянск (32)
2126-020 УЗАМ1700 Солекс073 БСЗ Плаза
|
|
« Ответ #34 : 05 Июля 2005, 14:43:47 » |
|
согласен.
только я всё-таки против обобщений на пустом месте. есть и кривые софтины и кривые мозги у программеров, но каждый случай имеет смысл рассматривать отдельно.
общая тенденция пока такова, что нормальных программеров становится всё меньше, а дилетантов всё больше - это бесспорно, особенно это видно по студентам (опять не стоит обобщать, но нашему ремеслу научить наверное невозможно, или "дано" или "не дано").
был у меня рабочий период при котором я вынужден был заниматься студентами, приходящими ко мне на практику. за три года из примерно двух десятков практикантов (у всех были оценки "отлично" по специальности) писать программы мог только один - лично ему я дал рекомендательное письмо от предприятия - без опыта работу найти трудно, а парень был действительно толковый.
но остальные? они по 4 года уже отучились и имеют отличные оценки - при этом вообще понятия не имеют об азах специальности, я не утрирую, людям через год устраиваться на работу - они ПОЛНЫЕ дауны!
это проблема?
|
|
|
Записан
|
|
|
|
sf
Гость
|
|
« Ответ #35 : 05 Июля 2005, 16:14:18 » |
|
Студенты... Да... Это бардак... За годы работы заметил странную тенденцию: лучшие программисты это те, которых этому не учили в институте Наводит на некоторые размышления по поводу качества преподавания на факультетах информатики. У меня одноклассник в свое время закончил такой факультет. Так вот во время обучения их не учат программированию, их учат решать типовые задачи, придуманные преподами, и не меняющиеся год от года. Что, согласитесь, несколько странно. Помню писали они архиватор. Точнее брали исходники у старшего курса и вставляли свой копирайт. Так откуда возьмется умение писать программы? Плюс ко всему, преподы очень часто навязывают студентам свое субъективное мнение по поводу той или иной фирмы-разработчика или предпочтения пользовательского интерфейса. Ну и наконец ввести предмет по правилам разработки user interface. И обучению правильного форматирования source code. А то порой такое вижу...
|
|
|
Записан
|
|
|
|
tr13
Ветеран форума
Карма +0/-0
Offline
Сообщений: 1055
Челябинск / Северок
Шоссер
|
|
« Ответ #36 : 05 Июля 2005, 19:58:32 » |
|
По UI Design надо читать минимум годовой курс. По форматированию вообще ничего не надо читать, просто двояк и незачет за такие программы и все.
|
|
|
Записан
|
|
|
|
sf
Гость
|
|
« Ответ #37 : 05 Июля 2005, 21:42:01 » |
|
Оригинальное сообщение от tr13 По форматированию вообще ничего не надо читать, просто двояк и незачет за такие программы и все. Если бы так и было, то не было бы такой темы
|
|
|
Записан
|
|
|
|
Hexff
Частый гость
Карма +460/-0
Offline
Пол:
Сообщений: 178
Ярославль
Ярославль Citroёn C4
|
|
« Ответ #38 : 05 Июля 2005, 22:12:29 » |
|
Оригинальное сообщение от sf У меня одноклассник в свое время закончил такой факультет. Так вот во время обучения их не учат программированию, их учат решать типовые задачи, придуманные преподами, и не меняющиеся год от года. Что, согласитесь, несколько странно. А с чего вы решили, что в институте необходимо учить программировать? Любой язык можно изучить в среднем за месяц. Да и кому нужны "прикладники"? Цену имеют те специалисты, которые владеют фундаментальными знаниями - матаппарат, алгоритмы и т.п. А то что вы хотите - уровень гэпа не иначе...
|
|
|
Записан
|
|
|
|
Coldfire
Гость
|
|
« Ответ #39 : 06 Июля 2005, 08:59:36 » |
|
Оригинальное сообщение от sf Так вот во время обучения их не учат программированию, их учат решать типовые задачи, придуманные преподами, и не меняющиеся год от года. Что, согласитесь, несколько странно. Помню писали они архиватор. Точнее брали исходники у старшего курса и вставляли свой копирайт. Так откуда возьмется умение писать программы? Плюс ко всему, преподы очень часто навязывают студентам свое субъективное мнение по поводу той или иной фирмы-разработчика или предпочтения пользовательского интерфейса.
Господа, угомонитесь ! Невозможно научить программированию - хотя можно выучить основные алгоритмы и пользоваться ими. Вызубренные десяток типовых конструкций вроде "hello word" не есть умение программировать, как многие сейчас считают. Невозможно научить человека оформлять исходный текст - но можно заставить деньгами. Невозможно научить человека делать пользовательский интерфейс - но можно купить у дизайнера шаблон, или взять готовый скажем от MS, и заставить программиста ему следовать. И это в любой области. Что касается качества обучения - да, оно деградирует. Совместно со студентами. Не вижу никаких проблем с решением типовых задач - в свое время процент сливания исходных текстов был минимален, все старались сами делать. А сейчас - уже в школе народ вместо того, чтобы сделать реферат, сливает его в инете или с CD, после чего идет пить пиво. Преподы конечно тоже хороши - за сливание надо единицу ставить сразу и из института отчислять - пускай в армию идут служить. За свои 6 лет учебы в институте (окончил в 2000-м) с навязыванием своего мнения преподавателем ни разу не сталкивался. Хотя у нас и преподаватели были "неродные" - может статься местные институтские придурки и навязывают чего... К сожалению времена, когда программисты были элитой, давно канули в лету (кое-кто с тех пор еще остался, но их мало).
|
|
|
Записан
|
|
|
|
sf
Гость
|
|
« Ответ #40 : 06 Июля 2005, 14:02:01 » |
|
Оригинальное сообщение от Hexff Цену имеют те специалисты, которые владеют фундаментальными знаниями - матаппарат, алгоритмы и т.п. А то что вы хотите - уровень гэпа не иначе...
Да как вам сказать... Встречал я таких... Прекрасно знают высшую и дискретную математики, знают кучу алгоритмов из того же Кнута, а вот применить на практике не могут. А те, которые умеют и то другое в нашей стране, к сожалению, не нужны А откуда, кстати, такое отношение к прикладникам (складывается впечатление, что они, как класс, вообще не нужны)?
|
|
|
Записан
|
|
|
|
Hexff
Частый гость
Карма +460/-0
Offline
Пол:
Сообщений: 178
Ярославль
Ярославль Citroёn C4
|
|
« Ответ #41 : 06 Июля 2005, 14:23:17 » |
|
Да как вам сказать... Встречал я таких... Прекрасно знают высшую и дискретную математики, знают кучу алгоритмов из того же Кнута, а вот применить на практике не могут.
Ну это клиника. Чтобы писать программы не надо в большинстве случаев иметь семи пядей во лбу. А откуда, кстати, такое отношение к прикладникам (складывается впечатление, что они, как класс, вообще не нужны)? Почему не нужны? Просто их как грязи на рынке труда. В свое время в программисты повалило много народу, из-за ореола вокруг этой профессии, хороших денег и "непыльности". Вообще тема это объемная, если хочешь поболтаем...
|
|
|
Записан
|
|
|
|
sf
Гость
|
|
« Ответ #42 : 06 Июля 2005, 15:07:04 » |
|
Оригинальное сообщение от Hexff Вообще тема это объемная, если хочешь поболтаем... Дык, для того и создал
|
|
|
Записан
|
|
|
|
|