Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Форум группы: delphi > Нужна идея |
Автор: DarkProg 28.10.2009, 16:56 |
Вот у меня такое есть дело: Мне нужно в ближайшие три недели разработать прогу - тема проги свободная, но она должна быть небольшаая и красивая. В принципе это может быть решение кокой-то надоедливой задачи, когда делаешь кучу действий которые задалбливают, или какая-нибудь физическая модель или еще что-нибудь не относящееся напрямую к математике или физике В общем народ ну помогите с идеей, Принимаю даже почти бредовые идеи ![]() |
Автор: Akella 28.10.2009, 19:49 |
Ну не знаю, напиши что-то из этого 1. Программу типа ipicturescreenshooter 2. запоминалку/напоминалку/записную книжку (задачи, календарь и т.д.) 3. Программу резервного копирования файлов с поддержкой очень длинных путей, имён. |
Автор: CompWorm 31.10.2009, 12:34 |
хранитель ссылок какhttp://forum.vingrad.ru/forum/topic-212153.html , но бесплатную ![]() |
Автор: Akella 31.10.2009, 17:22 |
Эксперта для Delphi, который будет чистить USES |
Автор: Bose 3.11.2009, 20:18 |
есть такой уже в CnPack. Лучше эксперта для Delphi который сможет стандартное ToDo окошко синхронизировать с каким-нить онлайн ToDo сервисом, а лучше несколькими. |
Автор: CodeMonkey 5.11.2009, 18:34 |
Ножницы для XP. Добавлено через 1 минуту и 8 секунд P.S. В Windows 7 появилась специальная программа для снятия скриншотов. Типа, многие тупят нажать на PrintScreen. А разрабам иметь скрины охота, а объяснять - ломает. Поэтому добавили "ножницы". Сделайте такую же. |
Автор: Bose 10.2.2010, 14:58 | ||
Так уже есть много хороших, удобных и бесплатных. http://bugshooting.com/, например, очень хороша. |
Автор: Akella 10.2.2010, 22:17 |
за 20 долларов )) Добавлено через 19 секунд ой, 20 евро! Добавлено через 1 минуту и 1 секунду Я не про то, что это дорого, я про то, что есть бесплатные аналоги да ещё и на русском. Какой смысл платить 20 евро? |
Автор: Bose 11.2.2010, 02:43 | ||
Free version: Version: 1.9.3 Раньше платной версии не было. Была только версия 1.х. А программка чудо как хороша. |
Автор: Akella 13.2.2010, 13:01 |
Я так понял, что для этой программы нужно устанавливать ещё какие-то программы в зависимости от выбранного сервера? Снимки экрана-то она делает, но не могу понять, как отправлять на тот или иной сервер. |
Автор: Bose 13.2.2010, 18:26 | ||
А на какой сервер ты пытаешься отправить? Один нюанс, эта программа не умеет отправлять скриншоты на хостинги картинок без дополнительной настройки. Зато она умеет отправлять скриншоты по мейлу, закачивать на FTP, слать по скайпу, и передавать картинку сторонним программам через командную строку. BugShooting умеет отправлять скриншоты в следующие системы: 1) FogBugz - платный bug-tracker. хостится у авторов 2) Gemini - не знаю такого 3) OnTime - не знаю такого 4) BugTracker.NET - не знаю такого 5) Mantis BT - бесплатный open-source древний баг-трекер 6) Done.Done. - не знаю такого 7) JIRA - платный баг-трекер. Считается одним из лучших. 8) SpiraTest - не знаю такого 9) elementool - не знаю такого 10) Unfuddle - не знаю такого 11) Skype 12) Outlook 13) MS Paint 14) FTP 15) Send screenshots to every Application by using the command line. |
Автор: Akella 14.2.2010, 11:53 |
Мне всё равно. Принцип простой. Такой же, как и у iPicture. Программа IPictureScreenShooter по нажатию кнопки делает снимок и отправляет на свой сайт, сразу предоставляя несколько вариантов ссылок. можно отправить ссылку товарищу, можно отправить на сайт или форум. А в этой проге я такого не нашёл :( |
Автор: Akella 14.2.2010, 14:03 | ||
вот в этом-то её большой минус |
Автор: DarkProg 14.2.2010, 21:30 |
Ребят, конечно спасибо, что вы сюда пишите, но я уже давно всё сделал ![]() |
Автор: Akella 15.2.2010, 10:33 |
Всё - это что? показывай |
Автор: DarkProg 15.2.2010, 18:34 |
Как сертификат придёт о регистрации так выложу в готовых проектах ![]() ![]() |
Автор: ChessMag 15.2.2010, 20:04 | ||
Парни нужна помощь. Я написал прогу, для перевода цифр из десятичной системы счисления в двоичную систему. Вот код
Парни помогите написать прогу которая будет переводить двоичные числа в десятичные! Сам пробывал нифига не получаеться! Модератор: создайте отдельную тему + используйте подсветку кода |
Автор: Akella 15.2.2010, 22:23 |
Я смотрю, всё больше "программистов", которые даже не знают, что такое форумы и как, и где правильно задать вопрос. |
Автор: DarkProg 16.2.2010, 20:08 |
Akella - это не программист, а так, он ещё недоэволюционировал раз 5 минутную прогу написать не может, да и вообще лепит сообщение куда не надо |
Автор: chip_and_dayl 16.2.2010, 20:58 |
О боже там еще есть goto. Я даже забыл о его существование З. Ы. Извиняюсь за оффтоп |
Автор: bems 17.2.2010, 16:38 |
Ну это значит что плохо язык знаешь, да |
Автор: DarkProg 17.2.2010, 17:03 |
Ну знаешь вообще этим goto вообще пользоваться вредно, т.к. ещё до моего рождения было решено, что только ламера используют это безобразие, а нормальные прогальщики должны писать нормальные коды где всё просто и понятно, а этот опреатор вносит "неразбериху в код" |
Автор: Akella 17.2.2010, 22:46 |
Ничё, в группе Дельфи можно ![]() |
Автор: bems 18.2.2010, 00:06 |
=> первый автор ядра линукс - ламер а это что за звери? ![]() |
Автор: Keeper89 18.2.2010, 02:42 | ||
Почитай, у Макконелла написано, что это редкость но есть просто необходимые случаи. |
Автор: Akella 18.2.2010, 14:24 | ||
а что, нет? ![]() Добавлено через 2 минуты и 51 секунду
которые прОгают ![]() |
Автор: DarkProg 18.2.2010, 16:09 | ||
Конечно есть такие случаи, в первую очередь когда пишешь на asm'e ![]() |
Автор: bems 18.2.2010, 19:20 | ||
|
Автор: chip_and_dayl 18.2.2010, 19:22 |
Забыл и не знаю вещи разные. И это плохо, что вы не знаете ![]() |
Автор: DarkProg 18.2.2010, 21:42 |
Ну наскоко я знаю одни работают как goto а другие как типа if+goto,я точно не уверен, потому что в asm'e не шарю :( |
Автор: bems 18.2.2010, 22:57 |
"Вы" это и я тоже, да? я как раз знаю, лол. |
Автор: bems 18.2.2010, 23:15 | ||
|
Автор: profesiachuvak 19.2.2010, 23:01 |
Недавно читал статью в википедии про "http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B0%D0%B3%D0%B5%D1%82%D1%82%D0%B8-%D0%BA%D0%BE%D0%B4". Это как раз то что получается когда используешь GOTO. ![]() |
Автор: bems 19.2.2010, 23:22 |
profesiachuvak, у тебя логическая ошибка. "Существует как минимум один спагетти код, инспирированый использованием goto" - верно. "Каждое использование goto ведет к спагетти-коду" - неверно. |
Автор: profesiachuvak 21.2.2010, 21:21 |
![]() В защиту ![]() Я не писал каждое, хоть и из контекста кажется именно так. Скорее это неправильное построение предложения, нежели логическая ошибка. |
Автор: bems 21.2.2010, 22:04 |
profesiachuvak, спагетти бывает и без гоуту. Не использовать вообще никаких операторов? |
Автор: profesiachuvak 21.2.2010, 22:43 |
bems, Вы не хотите меня понять. Ваше утверждение очевидно, и я непонимаю к чему Вы объясняете мне это. ![]() Речь идёт о операторе безусловного перехода. О других операторах речь не идёт. |
Автор: bems 21.2.2010, 22:59 |
profesiachuvak, ну смотри. Есть макароны с гоуту, и макароны без гоуту. Нельзя использовать именно гоуту. Почему? Потому что про остальные операторы речь не идет. Я правда не понимаю ![]() |
Автор: profesiachuvak 21.2.2010, 23:07 |
Использую Ваш стиль: - верно - неверно //не понимаю от куда вы это взяли - верно //это ответ на Ваш нелогичный вопрос : . - верно //естественно используя такую нелогичную цепочку. По мне так всё понятно ![]() |
Автор: bems 21.2.2010, 23:09 | ||
отсюда
|
Автор: profesiachuvak 21.2.2010, 23:20 | ||||
Вот тут я согласился, что сделал ошибку в этом утверждении:
![]() |
Автор: bems 21.2.2010, 23:36 |
Ну раз согласился, значит нет причин не использовать goto |
Автор: THandle 22.2.2010, 18:48 |
Интересно рассуждаете ![]() Продолжайте пожалуйста ![]() |
Автор: DarkProg 22.2.2010, 19:16 |
Причин то его не использовать нет, но использовать его это неправильно, мне в своё время все уши проездили с этим преподы по программированию, а посему с тех пор я этим и не пользуюсь Я уже писал, раньше, что ещё до моего рождения(ну может уже родился точно не помню ![]() ![]() |
Автор: profesiachuvak 22.2.2010, 20:07 | ||
Логика железная ![]() Перефразирую Ваше высказывание: Ну раз согласился, значит нет причин использовать goto Вот с этим я согласен ![]() Добавлено @ 20:08
Вот это истина. |
Автор: bems 22.2.2010, 20:08 | ||||||||
на какой? Прям всего-всего? Держу пари, индусов там не было. Так что выборочка-то того, хромает.
![]() Вот и славненько, вот и договорились ![]() Добавлено через 4 минуты и 50 секунд profesiachuvak, так ті согласился с тем что утверждениеневерно? |
Автор: profesiachuvak 22.2.2010, 20:13 | ||
Ну нас не слышите, так прочтите рассуждение умного человека на этот счёт: http://khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/pp/ewd215.html |
Автор: bems 22.2.2010, 20:22 |
А вы почитайте другого умного человека: http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf |
Автор: profesiachuvak 22.2.2010, 20:37 | ||
41 страница, Вы издеваетесь. Ссылку скопирую, но прочту позже.
Конечно. Грамотное, а главное действительное необходимое, употребление GoTo иногда даже полезна и не вносит "неразбериху" в код. bems, Но Вы же должны понимать, что мы не выбираем единичные случаи, а рассматриваем нечто вроде среднего арифметического среди всех случаев использования Goto. Общее обсуждение того что оно не есть "хороший тон" не беспочвенно. Я думаю это аксиома и я не буду даже приводить примеров. Но я согласен, что Goto может помочь скажем при выходе из кучи вложенных циклов, не искажая реальности после прочтения программы другим человеком. (Хотя опять же как насчёт break) |
Автор: bems 22.2.2010, 20:56 | ||||||
нууу... А если я начну утверждать что goto привносит господню благодать в код, и скажу что это аксиома? Не надо множить аксиомы, доказывайте.
![]() |
Автор: profesiachuvak 22.2.2010, 21:01 | ||
![]()
Да ради Бога. Аксиомы доказывать не умею. Не учили такому. ![]() |
Автор: bems 22.2.2010, 21:08 | ||
Ну это не в большей степени юмор чем все обсужение
|
Автор: profesiachuvak 22.2.2010, 21:15 | ||||
Это с юморком сказал да. Понятно, что в действительности я не сидел и не трясся от страха. ![]()
Едва ли. Моя точка зрения остаётся такой же какой была до нашего обсуждения. И я говорю не потому что мне не хочется признавать это, а так есть на самом деле. Я лишь согласился что допустил лексическую ошибку в своём первом утверждении.
Вот тут Вы согласились со мной. 1:1 |
Автор: bems 22.2.2010, 21:32 |
Совсем, нет. Я согласился с таким направлением дискуссии (так сказать по регламенту), а не с выводом. Но вы почему-то не хотите быть последовательным и предложить выборку. |
Автор: DarkProg 23.2.2010, 14:13 | ||
Хм, Кнут, а это интересно, надеюсь будет время и почитаю ![]() |
Автор: profesiachuvak 23.2.2010, 20:06 | ||
Совсем да. Соглашаясь с таким направлением дискуссии, которое предложил я, Вы соглашаетесь со мной. Логично? 1:1
Играю в такую же игру как мой оппонент. |
Автор: CodeMonkey 5.3.2010, 03:32 | ||||
...там стоит 68-й год...
Окей, сколько программ вы лично видели со злоупотреблениями goto? А сколько без? (а теперь то же самое, только для with ![]() За свою жизнь я видел довольно много кода с goto ("довольно много" = "не раз и не два"). Но ни разу не видел спагетти-кода с ним. Так в чём проблема? |
Автор: bems 5.3.2010, 04:53 | ||||
О! Как я мог забыть про этот топик?!
Ну и что изменилось с тех пор в этом отношении?
|
Автор: CodeMonkey 5.3.2010, 11:06 | ||
Мир вокруг ![]() Реалии, которые были в то время, сейчас уже не актуальны. Я не имею ввиду, что теоретические выкладки, что любую программу можно написать без goto, стали неверны. Я имею ввиду, что с практической точки зрения все эти акции "нет goto" начались не с пустого места, а с вполне реальной (в то время) практики его злоупотребления. Ну и как это применимо сегодня (к Delphi)? Никак. Потому что никакого злоупотребления сегодня нет.
Ну, а значит-то это что, по-вашему? Что goto - зло? Или что это полезный инструмент, который иногда необходим, но использовать его лучше бы правильно? Вон, with есть чуть ли не в трети программ, где ж тут было всё "прогрессивное человечество"? |
Автор: bems 5.3.2010, 14:28 |
Второй раз with протаскиваешь. Он хороший! |
Автор: profesiachuvak 5.3.2010, 18:14 | ||
Вообще вся дискуссия как раз на эту тему. К ответу на этот вопрос мы так и не пришли. И не придём. Вопрос в другом: Фор-ла такая : ЛАПША = GOTO <=> GOTO = ЛАПША. Проводить доказательство? P.S. Я уже подумал, что Вы сдались ![]() |
Автор: profesiachuvak 5.3.2010, 18:31 |
Отлично! Золотые времена, тогда люди действительно думали, а не копировали чужие статьи, приписывая своё авторство. |
Автор: bems 5.3.2010, 21:35 | ||||
Рановато. Для начала дайте определение вашему "=", потому что если понимать его так как понимаю я, то формула при внутренней непротиворечивости противоречит вашему утверждению
Это же значит что в формуле не привычное мне "=", а какое-то ваше "в основном равно, на множестве, которое я отказываюсь определить" Добавлено через 2 минуты и 38 секунд Да, и на всякий случай скобки в формуле проставь. Так, для ясности Добавлено через 8 минут и 41 секунду
Ну да, реалии изменились. Но они изменились именно благодаря появлению в то время всех этих выкладок, и этой статьи в том числе. Так что когда кто-то пытается вернуться к гоуту то вполне логично напомнить ему статью датируемую дремучим годом. |
Автор: CodeMonkey 6.3.2010, 14:00 | ||||
Скорее благодаря языкам, где использование goto обычно не нужно. В примере с лапшой на вики не просто так пример кода на http://en.wikipedia.org/wiki/BASIC#Examples ;) - он вас просто подталкивает к использованию goto. Да, языки менялись под воздействием различных работ, но программерская масса (не все, а только мясо) ничего этого не читала, а просто юзала текущий инструмент. Меняется инструмент - меняются и программы. Поэтому:
имеет смысл только в том случае, если человек нацеливается на лапшу. Поскольку никто, очевидно, этого не делает (в Delphi нет необходимости), то заморачиваться по этому вопросу обычно смысла не имеет. Человек, "пытающийся вернуться к goto", ограничится организацией бесконечного цикла или там выходом из двойного. В голову больше не приходит сценариев, зачем ещё нужен goto. Предостерегать-то и нечего. Right. Только почему-то я очень часто видел, как с его помощью простреливали себе ногу. Да и сам не раз обжигался. |
Автор: k0rvin 10.3.2010, 19:44 | ||||||
я так понимаю (по своему опыту, делфи-2006, может сейчас по-другому), что проблема у with в том, что оно неправильно выстраивает precedence-list (или не выстраивает его вообще), т.е. например при использовании в качестве объекта with какого-нибудь экземпляра TTable внутри метода формы, в теле with частенько компилируются методы не TTable, а TForm (то ли Next, то ли Append, не помню точно), хотя хотелось бы, чтобы преимущество имели методы и свойства объекта with по поводу goto: если алгоритм требует его, то можно 1) вместо goto перестроить код с использованием исключений -- получается "жирнее", но более правильно с точки зрения структурного подхода; 2) попробовать выделить участок кода в отдельную подпрограмму и использовать Exit -- тоже "жирнее", но правильней наиболее оптимальным решением видится включение в язык поддержки конструкции наподобии особой формы block из Common Lisp:
|
Автор: bems 10.3.2010, 23:30 | ||||||
Добавлено через 2 минуты и 7 секунд
Использование исключений не по назначению это тоже big no. Не вижу чем одно могло бы быть лучше другого Добавлено через 3 минуты и 11 секунд
|
Автор: k0rvin 10.3.2010, 23:46 | ||||||||||
ок, а в чем проблема? и что значит "так и заявлено"? т.е. такое поведение -- норма? имхо тупость, объект with должен рассматриваться в первую очередь, иначе смысла от такого with мало
оно лучше идеологически -- более структурный подход, чем goto. Если Вас беспокоит назначение, введите в паскаль/делфи продолжения (continuations) -- будет самое то
дык никто и не боится, только единственное обоснованое применение goto -- нелокальный выход, а для этого есть более правильные решения, чем сам goto |
Автор: bems 10.3.2010, 23:52 | ||
Оно так и есть Не лучше. Тоже плохо.
|
Автор: k0rvin 10.3.2010, 23:59 | ||||
по моему опыту -- нет. пример я привел. если в делфи страше 2006 исправили, то ок, проблема решена.
обоснуй. моё обоснование: использование исключений позволяет писать структурированный код и реализовывать нелокальные выходы. альтернативные способы решения этой задачи: продолжения, goto. goto менее всего соответствует структурированному подходу. Ваши возражения? |
Автор: bems 11.3.2010, 07:22 |
Суть возражения в том, что структурность это еще не все. Если в программе исключения являются частью нормального хода выполнения, а не возникают в исключительных ситуациях, то это ###. Тестовый проект был бы примером. |
Автор: k0rvin 11.3.2010, 07:38 | ||||
это уже другой вопрос
ок, вечером запощу |
Автор: Akella 11.3.2010, 10:09 |
эммм.. за"что"? |
Автор: k0rvin 11.3.2010, 18:23 |
эксперимент не удался, повторить код не получилось, видимо память меня подводит и в том коде причина указанного эффект была в другом. посему можно считать вопрос закрытым. |
Автор: bems 11.3.2010, 20:37 |
k0rvin, нет, нельзя. Собственно поскольку оказалось что with работает правильно, то значит его проблема в другой плоскости. Имхо проблемы и нет вовсе, но нужно раскрыть причину его упоминания здесь. Сейчас нарою ссылку. |
Автор: k0rvin 11.3.2010, 20:40 | ||
я имел в виду, что можно закрыть вопрос конкретно по моей претензии, не более =) |
Автор: bems 11.3.2010, 20:43 | ||
Ну да, у кого бы я еще мог это видеть ![]() Вот цитатка
|
Автор: k0rvin 11.3.2010, 20:45 | ||
[QUOTE=profesiachuvak,5.3.2010, 18:14]
вообще не совсем корректная формула, лапша = (в том числе и goto) например некоторые товарищи утверждают, что с помощью продолжений (continuations) можно довольно легко написать гораздо более запутанный код, чем тот, что может позволить использование goto =) |
Автор: bems 11.3.2010, 20:47 |
Но в то же время и goto = (и лапша тоже) ![]() |
Автор: k0rvin 11.3.2010, 20:52 | ||||
мда, действительно неприятность. видимо стоит отказаться от использования with и юзать "переменные-псевдонимы" Добавлено @ 20:59 хотя по большому счёту проблема здесь не в with, а в кривых руках автора TSomeClass, который меняет интерфейс класса. нужно было вначале писать интерфейс и в будущем не отступать от него, в крайнем же случае, если без изменения интерфейса никак -- создавать новый класс |
Автор: bems 12.3.2010, 03:47 |
Ну прям и интерфейс не дополнить |
Автор: CodeMonkey 12.3.2010, 10:49 |
Ну, вообще-то при разработке класса (class) не менять интерфейс - это перебор. Классы живут и развиваются очень динамично (рефакторинг и т.п.). А вот при разработке интерфейсов (interface) это - обязательное правило. Как только вы закончили разработку, интерфейс более не меняется. Иначе будут происходить страшные вещи. У with не было бы вообще никаких проблем, если бы он требовал использования алиасов. А так - это бомба с часовым механизмом, которая может взорваться при совершенно безобидных действиях. |
Автор: k0rvin 12.3.2010, 19:03 | ||
1) а не нужно классы разрабатывать, нужно разрабатывать интерфейсы (и/или интерфейсы (interface), а классы нужно реализовывать согласно интерфейсам/интерфейсам 2) в паскале/делфи классы не живут и не развиваются, а являются статичными объектами (объектами не в смысле экземплярами классов, а в более общем смысле =)) |
Автор: CodeMonkey 14.3.2010, 00:47 |
![]() Neal Stephenson thinks it's cute to name his labels 'dengo'. |
Автор: bems 14.3.2010, 17:25 | ||||
"Alt" attribute, mothefucker! Do you use it!? Добавлено через 2 минуты и 13 секунд
Добавлено через 5 минут и 37 секунд
![]() С умом нужно, и эти случаи будут не частыми. |
Автор: CodeMonkey 15.3.2010, 11:18 |
Да, такое случается не часто. Проблема в том, что вы не можете это контролировать. В случае с goto - вы всегда можете предотвратить его плохой эффект. В случае с with - нет. Вы установили новую версию компонента и теперь ваша программа с кучей with странно себя ведёт. Удачи вам отладить это. |
Автор: bems 15.3.2010, 14:47 |
CodeMonkey, а то что было в alt хоть внизу подпиши. |
Автор: k0rvin 16.3.2010, 18:22 | ||
они должны это делать только на стадии проектирования, никак не на стадии реализации. конечно это идеальный случай, а практика далека от идеала. поэтому я пожалуй соглашусь с обезьянкой, with с обязательным использованием алиасов -- оптимальное решение. |
Автор: Akella 17.3.2010, 11:19 | ||
А зачем тогда with? Ведь назначение with - это упрощение кода? |
Автор: k0rvin 17.3.2010, 13:13 | ||||||
всяко проще, чем без него |
Автор: bems 17.3.2010, 14:50 | ||
k0rvin, нет with нужно переделать подругому
Порядок классов обрабатывается как в except |
Автор: cemick 17.3.2010, 15:09 |
Может быть я не в тему(хотя тут все посты оффтоп), а кто нибудь сталкивался в живую с неправильно работающим "with" ? |
Автор: CodeMonkey 17.3.2010, 15:35 | ||
Смотря что вы понимаете под "неправильным". |
Автор: k0rvin 17.3.2010, 18:30 | ||||
имхо, Вы усложняете |
Автор: bems 18.3.2010, 01:00 | ||
Это было бы усложнением если бы я пытался так решить проблему о которой говорил CodeМonkey. А я тут двух зайцев. Согласись, бывают же случаи (и не то что бы редко), когда приходится писать так
Мой вариант как раз для вот таких случаев, но добавляет сервис компилятора: в then-ветке объект имеет тот тип, который только что был успешно протестирован. Это безопаснее, потому что не требует приведения типа. И пример не совсем мой, нечто подобное кажется есть в Обероне. |
Автор: k0rvin 18.3.2010, 18:20 | ||||||
ясно... сегодня я вдруг подумал, а ведь у uses такое же поведение, как и у with, т.е. например
выведет в stdin "Unit1.Foo", но стоит добавить декларацию Foo в интерфейсную часть Unit2, как мы получаем тот же эффект, что и с with. |
Автор: cemick 18.3.2010, 19:09 |
обсуждение надуманной проблемы, ни разу не испытывал каких то проблем при использовании with, как и при поиске методов в модулей. Если и возникает ошибочное обращение, то это легко отлавливается. |
Автор: bems 19.3.2010, 07:56 | ||
Ты наверное хотел сказать stdout Ну да, этот эффект от порядка юнитов известен и даже используется (для тспользования базового компонента в дизайнтайме и подмены его кастомным наследником в рантайме) |
Автор: CodeMonkey 19.3.2010, 12:42 |
Это не надуманная проблема. Часто ли вы используете with и модифицируете классы, участвующие в нём? Если бы вы делали это достаточно часто, то уже набили бы себе несколько шишек. И ловится это не так просто, как вам кажется - потом будете долго плеваться. |
Автор: cemick 19.3.2010, 12:59 |
Сделал поиск по рабочему проекту слова "with" (whole word only) 2793 matches. |
Автор: k0rvin 19.3.2010, 19:50 | ||||
да, хотел... но перепутал =) а зачем "использовать базовый компонент в дизайнтайме и подменять его кастомным наследником в рантайме"? и, ты наверное хотел сказать в compile-time'е, а не рантайме? =) |
Автор: CodeMonkey 22.3.2010, 11:15 |
Что-то мне подсказывает, что все они - однотиповые использования статических классов VCL ;) Если у вас есть динамически развивающаяся иерархия классов и вы так часто используете with - лично мне странно, что вы с этим не сталкивались. Когда-то я тоже довольно часто использовал with. И для меня выглядели странными высказывания некоторых людей, которые говорили об опасности использования with и о том, что они теперь его используют очень редко или не используют вообще (кажется, это был DRON на DK). Я тоже думал: "ну, с мной же такого не может произойти, ведь я внимательно слежу за своим кодом!". Поэтому я выкинул это из головы и продолжил жить дальше. Пока, в один прекрасный день программа не стала себя странно вести. Нет, она не вылетала, не выкидывала исключение - она просто вела себя "как-то не так". Я потратил чуть ли не день, закопавшись в отладчик, пытаясь понять как же это "не так". В итоге я выяснил, что нужный метод не вызывается вовсе - бряк, поставленный на него не срабатывает. Мои глаза чуть не вылезли, когда я увидел, что код вызова этого метода вообще-то выполняется. Да, про то обсуждение with я уже забыл, и даже не обратил внимание, что он здесь используется - блок кода был большим. Поэтому я закопался в ассемблерный отладчик только для того, чтобы увидеть, что вызывается метод не того объекта. После чего я увидел with и долго стучал головой о стол. Когда такое произошло во второй раз (окей, в этот раз я потратил меньше времени), я вспомнил о том обсуждении with на DK и сказал себе: всё, стоп, хватит с меня этого. Не пойти ли этому with в баню. С того момента я не использую with. Каждый раз, когда у меня длинная переменная или цепочка (кандидаты для использования with) - я завожу переменную-псевдоним. Всё, точка. Теперь у меня нет и не может быть таких проблем. Кроме того, в новых Delphi завести псевдоним даже проще, чем написать with - благо есть рефакторинг "Introduce variable". Ладно, может быть такие временные отказы и не слишком серьёзная причина, но, как я уже сказал, настоящая проблема не столько в них, сколько в том, что вы не можете это контролировать. Вы можете изменить какой-то класс и даже не заметить как поплыла ваша программа. Вы сдаёте программу заказчику, а через два месяца он вам звонит и говорит: "а какого чёрта не работает функционал X, если мы его проверяли в январе?". И когда вы начнёте копаться в этом, вы обнаружите, что with стал вызывать другой метод, из-за чего нарушилась вся логика уже отлаженного кода, который вы полгода уже не трогали. |
Автор: cemick 22.3.2010, 11:37 |
CodeMonkey На счет динамичности, то тут все я бы сказал через чур динамично и не детерменированно, но все таки больших проблем именно из-за with не имел. Ну на самом деле With мне никогда не нравился, правда в других аспектах: затруднение отладки и разбор чужого кода. Может действительно, стоит не ждать удара граблей по лбу и взять на вооружение практику "никакого with, псевдоним наше все". |
Автор: bems 22.3.2010, 15:05 | ||
k0rvin, я хотел сказать то что сказал. Добавлено через 6 минут и 19 секунд
Если нужен именно наследник, и ты хочешь полноценную работу с дизайнером. Тут можно зарегистрировать наследник и ложить на форму его, но это не всегда удобно, многие любят чтобы проект собирался без манипуляций со средой вроде установки компонент. |
Автор: k0rvin 24.3.2010, 19:31 | ||
зачем менять класс в рантайме, если лучше и правильней в случае делфи/паскаля это сделать при компиляции. вообще хотелось бы посмотреть как Вы будете менять класс объекта в рантайме в делфи =) |
Автор: bems 24.3.2010, 21:31 | ||||
Во-первых, документированная альтернатива подсовыванию юнита с одноименным классом, это именно обработка события в рантайме (при этом не изменяется класс существующего объекта, а перед созданием читаемого из ресурса компонента есть возможность указать свой класс). Но как показывает практика, подмена класса при компиляции выгоднее. Во-вторых можно сменить класс и существующему объекту, но это допустимо только в исследовательских целях. |
Автор: k0rvin 24.3.2010, 22:52 | ||
эээ... разве компоновка модулей в экзешник происходит в рантайме? |
Автор: bems 25.3.2010, 00:07 | ||||
Тут я говорил про альтернативу. Она да, рантаймовая. Ну ясно что при компиляции. Но тут
|
Автор: Argilius 1.7.2010, 14:04 | ||
Это как физическая модель может не относится к физике ![]() Напиши графики биоритмов человека или предсказание судьбы по дате рождения. |