Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Форум группы: delphi > Нужна идея


Автор: DarkProg 28.10.2009, 16:56
Вот у меня такое есть дело:
Мне нужно в ближайшие три недели разработать прогу - тема проги свободная, но она должна быть небольшаая и красивая.
В принципе это может быть решение кокой-то надоедливой задачи, когда делаешь кучу действий которые задалбливают, или какая-нибудь физическая модель или еще что-нибудь не относящееся напрямую к математике или физике


В общем народ ну помогите с идеей,


Принимаю даже почти бредовые идеи  smile 

Автор: Akella 28.10.2009, 19:49
Ну не знаю, напиши что-то из этого
1. Программу типа ipicturescreenshooter
2. запоминалку/напоминалку/записную книжку (задачи, календарь и т.д.)
3. Программу резервного копирования файлов с поддержкой очень длинных путей, имён.

Автор: CompWorm 31.10.2009, 12:34
хранитель ссылок какhttp://forum.vingrad.ru/forum/topic-212153.html , но бесплатную  smile  с экспортом и импортом для огнелиса, оперы, хрома и эксплорера.

Автор: Akella 31.10.2009, 17:22
Эксперта для Delphi, который будет чистить USES

Автор: Bose 3.11.2009, 20:18
Цитата(Akella @  31.10.2009,  16:22 Найти цитируемый пост)
Эксперта для Delphi, который будет чистить USES 

есть такой уже в CnPack.

Лучше эксперта для Delphi который сможет стандартное ToDo окошко синхронизировать с каким-нить онлайн ToDo сервисом, а лучше несколькими. 

Автор: CodeMonkey 5.11.2009, 18:34
Ножницы для XP.

Добавлено через 1 минуту и 8 секунд
P.S. В Windows 7 появилась специальная программа для снятия скриншотов. Типа, многие тупят нажать на PrintScreen. А разрабам иметь скрины охота, а объяснять - ломает. Поэтому добавили "ножницы".

Сделайте такую же.

Автор: Akella 5.11.2009, 19:09
Цитата(Bose @  3.11.2009,  20:18 Найти цитируемый пост)
есть такой уже в CnPack.

А я не хочу устанавливать CnPack

Добавлено через 1 минуту и 40 секунд
Цитата(CodeMonkey @  5.11.2009,  18:34 Найти цитируемый пост)
P.S. В Windows 7 появилась специальная программа для снятия скриншотов. Типа, многие тупят нажать на PrintScreen. А разрабам иметь скрины охота, а объяснять - ломает. Поэтому добавили "ножницы".

Сделайте такую же.


Цитата(Akella @  28.10.2009,  19:49 Найти цитируемый пост)
1. Программу типа ipicturescreenshooter


 smile 

Автор: Bose 10.2.2010, 14:58
Цитата(CodeMonkey @ 5.11.2009,  17:34)
Ножницы для XP.

Добавлено @ 18:35
P.S. В Windows 7 появилась специальная программа для снятия скриншотов. Типа, многие тупят нажать на PrintScreen. А разрабам иметь скрины охота, а объяснять - ломает. Поэтому добавили "ножницы".

Сделайте такую же.

Так уже есть много хороших, удобных и бесплатных.

http://bugshooting.com/, например, очень хороша.

Автор: Akella 10.2.2010, 22:17
Цитата(Bose @  10.2.2010,  14:58 Найти цитируемый пост)
BugShooting, например, очень хороша. 

за 20 долларов ))

Добавлено через 19 секунд
ой, 20 евро!

Добавлено через 1 минуту и 1 секунду
Я не про то, что это дорого, я про то, что есть бесплатные аналоги да ещё и на русском. Какой смысл платить 20 евро?

Автор: Bose 11.2.2010, 02:43
Цитата(Akella @ 10.2.2010,  21:17)
Цитата(Bose @  10.2.2010,  14:58 Найти цитируемый пост)
BugShooting, например, очень хороша. 

за 20 долларов ))

Добавлено @ 22:17
ой, 20 евро!

Добавлено @ 22:18
Я не про то, что это дорого, я про то, что есть бесплатные аналоги да ещё и на русском. Какой смысл платить 20 евро?

Free version: Version: 1.9.3 

Раньше платной версии не было. 
Была только версия 1.х. А программка чудо как хороша.

Автор: Akella 13.2.2010, 13:01
Я так понял, что для этой программы нужно устанавливать ещё какие-то программы в зависимости от выбранного сервера?
Снимки экрана-то она делает, но не могу понять, как отправлять на тот или иной сервер.

Автор: Bose 13.2.2010, 18:26
Цитата(Akella @  13.2.2010,  12:01 Найти цитируемый пост)
Я так понял, что для этой программы нужно устанавливать ещё какие-то программы в зависимости от выбранного сервера?
Снимки экрана-то она делает, но не могу понять, как отправлять на тот или иной сервер. 

А на какой сервер ты пытаешься отправить?

Один нюанс, эта программа не умеет отправлять скриншоты на хостинги картинок без дополнительной настройки. Зато она умеет отправлять скриншоты по мейлу, закачивать на 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
Цитата(Bose @  13.2.2010,  18:26 Найти цитируемый пост)
А на какой сервер ты пытаешься отправить?

Мне всё равно. Принцип простой. Такой же, как и у iPicture. Программа IPictureScreenShooter по нажатию кнопки делает снимок и отправляет на свой сайт, сразу предоставляя несколько вариантов ссылок. можно отправить ссылку товарищу, можно отправить на сайт или форум. А в этой проге я такого не нашёл :(

Автор: Akella 14.2.2010, 14:03
Цитата(Bose @  13.2.2010,  18:26 Найти цитируемый пост)
эта программа не умеет отправлять скриншоты на хостинги картинок без дополнительной настройки. Зато она умеет отправлять скриншоты по мейлу, закачивать на FTP, слать по скайпу, и передавать картинку сторонним программам через командную строку.

вот в этом-то её большой минус

Автор: DarkProg 14.2.2010, 21:30
Ребят, конечно спасибо, что вы сюда пишите, но я уже давно всё сделал smile

Автор: Akella 15.2.2010, 10:33
Всё - это что? показывай

Автор: DarkProg 15.2.2010, 18:34
Цитата(Akella @  15.2.2010,  10:33 Найти цитируемый пост)
Всё - это что? показывай 

Как сертификат придёт о регистрации так выложу в готовых проектах smile, а пока не буду smile

Автор: ChessMag 15.2.2010, 20:04
Парни нужна помощь. Я написал прогу, для перевода цифр из десятичной системы счисления в двоичную систему. Вот код
Код


function KDN2(Op_1: integer):integer;
var f: integer;
begin
for f := 0 to Op_1 do begin
if (f mod 2 = 0) or (f mod 2 <> 0) then inc©;
KDN2 := c;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
label 1;
begin
Button1.Enabled := false;
if edit1.Text = '' then exit;

Yu := KDN2(strtoint(edit1.Text));

Opr := strtoint(Edit1.Text);

1:if Opr < 1 then exit;

for h := yu downto 0 do begin

if Opr >= 1 then begin

res := opr mod 2;

if res = 0 then begin
label1.Caption := '0' + label1.Caption;
Res2 := opr / 2;
opr := trunc(Res2);
goto 1;
end;

if res <> 0 then begin
label1.Caption := '1' + label1.Caption;
Res2 := opr / 2;
opr := trunc(Res2);
goto 1;
end;

end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Clear;
Res := 0;
Res2 := 0;
yu := 0;
h := 0;
opr := 0;
KDN2(0);
label1.Caption := '';
Button1.Enabled := true;
end;

procedure TForm1.Press(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9':;
#8:;
else key := chr(0);
end;
end;

end.


Парни помогите написать прогу которая будет переводить двоичные числа в десятичные! Сам пробывал нифига не получаеться! 

Модератор: создайте отдельную тему + используйте подсветку кода

Автор: Akella 15.2.2010, 22:23
Я смотрю, всё больше "программистов", которые даже не знают, что такое форумы и как, и где правильно задать вопрос.

Автор: DarkProg 16.2.2010, 20:08
Цитата(Akella @  15.2.2010,  22:23 Найти цитируемый пост)
Я смотрю, всё больше "программистов"

Akella - это не программист, а так, он ещё недоэволюционировал раз 5 минутную прогу написать не может, да и вообще лепит сообщение куда не надо

Автор: chip_and_dayl 16.2.2010, 20:58
О боже там еще есть goto. Я даже забыл о его существование

З.  Ы. Извиняюсь за оффтоп

Автор: bems 17.2.2010, 16:38
Цитата(chip_and_dayl @  16.2.2010,  20:58 Найти цитируемый пост)
Я даже забыл о его существование

Ну это значит что плохо язык знаешь, да 

Автор: DarkProg 17.2.2010, 17:03
Цитата(bems @  17.2.2010,  16:38 Найти цитируемый пост)
Ну это значит что плохо язык знаешь, да  


Ну знаешь вообще этим goto вообще пользоваться вредно, т.к. ещё до моего рождения было решено, что только ламера используют это безобразие, а нормальные прогальщики должны писать нормальные коды где всё просто и понятно, а этот опреатор вносит "неразбериху в код"

Автор: Akella 17.2.2010, 22:46
Цитата(chip_and_dayl @  16.2.2010,  20:58 Найти цитируемый пост)
З.  Ы. Извиняюсь за оффтоп

Ничё, в группе Дельфи можно smile

Автор: bems 18.2.2010, 00:06
Цитата(DarkProg @  17.2.2010,  17:03 Найти цитируемый пост)
только ламера используют это безобразие

=> первый автор ядра линукс - ламер

Цитата(DarkProg @  17.2.2010,  17:03 Найти цитируемый пост)
нормальные прогальщики

а это что за звери? smile 

Автор: Keeper89 18.2.2010, 02:42
Цитата(DarkProg @  17.2.2010,  17:03 Найти цитируемый пост)
Ну знаешь вообще этим goto вообще пользоваться вредно, т.к. ещё до моего рождения было решено, что только ламера используют это безобразие, а нормальные прогальщики должны писать нормальные коды где всё просто и понятно, а этот опреатор вносит "неразбериху в код" 

Почитай, у Макконелла написано, что это редкость но есть просто необходимые случаи.

Автор: Akella 18.2.2010, 14:24
Цитата(bems @  18.2.2010,  00:06 Найти цитируемый пост)
=> первый автор ядра линукс - ламер

а что, нет? smile

Добавлено через 2 минуты и 51 секунду
Цитата(bems @  18.2.2010,  00:06 Найти цитируемый пост)
Цитата(DarkProg @  17.2.2010,  17:03 Найти цитируемый пост)
нормальные прогальщики

а это что за звери? smile 

которые прОгают smile 

Автор: DarkProg 18.2.2010, 16:09
Цитата(Keeper89 @  18.2.2010,  02:42 Найти цитируемый пост)
Почитай, у Макконелла написано, что это редкость но есть просто необходимые случаи. 


Конечно есть такие случаи, в первую очередь когда пишешь на asm'e smile

Автор: bems 18.2.2010, 19:20
Цитата(DarkProg @  18.2.2010,  16:09 Найти цитируемый пост)
Конечно есть такие случаи, в первую очередь когда пишешь на asm'e
А там зачем, есть же джампы разные?

Автор: chip_and_dayl 18.2.2010, 19:22
Цитата(bems @  17.2.2010,  16:38 Найти цитируемый пост)
Ну это значит что плохо язык знаешь, да

Забыл и не знаю вещи разные. И это плохо, что вы не знаете  smile 

Автор: DarkProg 18.2.2010, 21:42
Цитата(bems @  18.2.2010,  19:20 Найти цитируемый пост)
А там зачем, есть же джампы разные?

Ну наскоко я знаю одни работают как goto а другие как типа if+goto,я точно не уверен, потому что в asm'e не шарю :(

Автор: bems 18.2.2010, 22:57
Цитата(chip_and_dayl @  18.2.2010,  19:22 Найти цитируемый пост)
И это плохо, что вы не знаете

"Вы" это и я тоже, да? я как раз знаю, лол. 

Автор: bems 18.2.2010, 23:15
Цитата(DarkProg @  18.2.2010,  21:42 Найти цитируемый пост)
Ну наскоко я знаю одни работают как goto а другие как типа if+goto
Ну скорее наоборот, goto реализуется джампами.


Автор: profesiachuvak 19.2.2010, 23:01
Цитата(bems @  18.2.2010,  23:15 Найти цитируемый пост)
Ну скорее наоборот, goto реализуется джампами.


Недавно читал статью в википедии про "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.  smile 

Автор: bems 19.2.2010, 23:22
profesiachuvak, у тебя логическая ошибка.
"Существует как минимум один спагетти код, инспирированый использованием goto" - верно.
"Каждое использование goto ведет к спагетти-коду" - неверно.

Автор: profesiachuvak 21.2.2010, 21:21
Цитата(bems @  19.2.2010,  23:22 Найти цитируемый пост)
profesiachuvak, у тебя логическая ошибка.


 smile 


В защиту smile  :

Цитата(bems @  19.2.2010,  23:22 Найти цитируемый пост)
"Каждое использование goto ведет к спагетти-коду" - неверно. 
 Я не писал каждое, хоть и из контекста кажется именно так. Скорее это неправильное построение предложения, нежели логическая ошибка.

Автор: bems 21.2.2010, 22:04
profesiachuvak, спагетти бывает и без гоуту. Не использовать вообще никаких операторов?

Автор: profesiachuvak 21.2.2010, 22:43
Цитата(bems @  21.2.2010,  22:04 Найти цитируемый пост)
profesiachuvak, спагетти бывает и без гоуту.


bems, Вы не хотите меня понять. Ваше утверждение очевидно, и я непонимаю к чему Вы объясняете мне это. smile 

 
Цитата(bems @  21.2.2010,  22:04 Найти цитируемый пост)
Не использовать вообще никаких операторов?


Речь идёт о операторе безусловного перехода. О других операторах речь не идёт.

Автор: bems 21.2.2010, 22:59
profesiachuvak, ну смотри. Есть макароны с гоуту, и макароны без гоуту. Нельзя использовать именно гоуту. 
Почему? 
Потому что про остальные операторы речь не идет.

Я правда не понимаю  smile 

Автор: profesiachuvak 21.2.2010, 23:07
Использую Ваш стиль:
Цитата(bems @  21.2.2010,  22:59 Найти цитируемый пост)
Есть макароны с гоуту, и макароны без гоуту.
 - верно

Цитата(bems @  21.2.2010,  22:59 Найти цитируемый пост)
Нельзя использовать именно гоуту. 
 - неверно //не понимаю от куда вы это взяли

Цитата(bems @  21.2.2010,  22:59 Найти цитируемый пост)
Потому что про остальные операторы речь не идет.
 - верно //это ответ на Ваш нелогичный вопрос : 
Цитата(bems @  21.2.2010,  22:04 Найти цитируемый пост)
Не использовать вообще никаких операторов? 
.


Цитата(bems @  21.2.2010,  22:59 Найти цитируемый пост)
Я правда не понимаю
 - верно //естественно используя такую нелогичную цепочку.


По мне так всё понятно smile

Автор: bems 21.2.2010, 23:09
Цитата(profesiachuvak @  21.2.2010,  23:07 Найти цитируемый пост)
не понимаю от куда вы это взяли

отсюда
Цитата(profesiachuvak @  19.2.2010,  23:01 Найти цитируемый пост)
Недавно читал статью в википедии про "спагетти-код". 

Это как раз то что получается когда используешь GOTO


Автор: profesiachuvak 21.2.2010, 23:20
Цитата(bems @  21.2.2010,  23:09 Найти цитируемый пост)
отсюда
Цитата(profesiachuvak @  19.2.2010,  23:01 Найти цитируемый пост)
Недавно читал статью в википедии про "спагетти-код". 

Это как раз то что получается когда используешь GOTO


Вот тут я согласился, что сделал ошибку в этом утверждении:

Цитата(profesiachuvak @  21.2.2010,  21:21 Найти цитируемый пост)
Скорее это неправильное построение предложения, нежели логическая ошибка.


 smile 

Автор: bems 21.2.2010, 23:36
Ну раз согласился, значит нет причин не использовать goto

Автор: THandle 22.2.2010, 18:48
Интересно рассуждаете smile

Продолжайте пожалуйста  smile 

Автор: DarkProg 22.2.2010, 19:16
Цитата(bems @  21.2.2010,  23:36 Найти цитируемый пост)
Ну раз согласился, значит нет причин не использовать goto 


Причин то его не использовать нет, но использовать его это неправильно, мне в своё время все уши проездили с этим преподы по программированию, а посему с тех пор я этим и не пользуюсь

Я уже писал, раньше, что ещё до моего рождения(ну может уже родился точно не помню  smile  ), на какой-то там конференции программисты всего мира решили что ипользование goto ведёт к тому что "код становится менее понятным и goto вносит хаос в программный код", с чем я согласен, особенно когда иногда поглядываю на свои первые проги, в которых я использовавл этот самый goto и немогу разобрать, что должен выполнять этот программный модуль smile

Автор: profesiachuvak 22.2.2010, 20:07
Цитата(bems @  21.2.2010,  23:36 Найти цитируемый пост)
Ну раз согласился, значит нет причин не использовать goto 


Логика железная smile 

Перефразирую Ваше высказывание: 

Ну раз согласился, значит нет причин  использовать goto  Вот с этим я согласен  smile

Добавлено @ 20:08
Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
"код становится менее понятным и goto вносит хаос в программный код"


Вот это истина.

Автор: bems 22.2.2010, 20:08
Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
использовать его это неправильно, мне в своё время все уши проездили с этим преподы по программированию
ну если 1000 раз повторить что ты баран, то на 1001й ты начнешь блеять, это да. Но кроме жужжания аргументы есть?

Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
Я уже писал, раньше, что ещё до моего рождения(ну может уже родился точно не помню  smile  )
Дык когда все-таки, ты определись

Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
на какой-то там конференции
на какой?

Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
программисты всего мира решили
Прям всего-всего? Держу пари, индусов там не было. Так что выборочка-то того, хромает.

Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
что ипользование goto ведёт к тому что "код становится менее понятным и goto вносит хаос в программный код"
Это уже обсуждалось выше. Безпочвенное обобщение.

Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
с чем я согласен, особенно когда иногда поглядываю на свои первые проги, в которых я использовавл этот самый goto и немогу разобрать, что должен выполнять этот программный модуль
может неча на goto пенять? smile

Цитата(DarkProg @  22.2.2010,  19:16 Найти цитируемый пост)
Причин то его не использовать нет
Вот и славненько, вот и договорилисьsmile

Добавлено через 4 минуты и 50 секунд
profesiachuvak, так ті согласился с тем что утверждение
Цитата(bems @  19.2.2010,  23:22 Найти цитируемый пост)
"Каждое использование goto ведет к спагетти-коду"
неверно?


Автор: profesiachuvak 22.2.2010, 20:13
Цитата(bems @  22.2.2010,  20:08 Найти цитируемый пост)
ну если 1000 раз повторить что ты баран, то на 1001й ты начнешь блеять, это да. Но кроме жужжания аргументы есть?


Ну нас не слышите, так прочтите рассуждение умного человека на этот счёт: 
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
Цитата(bems @  22.2.2010,  20:22 Найти цитируемый пост)
А вы почитайте другого умного человека:


41 страница, Вы издеваетесь. Ссылку скопирую, но прочту позже.

Цитата(bems @  22.2.2010,  20:08 Найти цитируемый пост)
ак ті согласился с тем что утверждение
Цитата(bems @  19.2.2010,  23:22 Найти цитируемый пост)
"Каждое использование goto ведет к спагетти-коду"
неверно?


Конечно.
Грамотное, а главное действительное необходимое, употребление GoTo иногда даже полезна и не вносит "неразбериху" в код.


bems, Но Вы же должны понимать, что мы не выбираем единичные случаи, а рассматриваем нечто вроде среднего арифметического среди всех случаев использования Goto. Общее обсуждение того что оно не есть "хороший тон" не беспочвенно. Я думаю это аксиома и я не буду даже приводить примеров. 

Но я согласен, что Goto может помочь скажем при выходе из кучи вложенных циклов, не искажая реальности после прочтения программы другим человеком. (Хотя опять же как насчёт break)

Автор: bems 22.2.2010, 20:56
Цитата(profesiachuvak @  22.2.2010,  20:37 Найти цитируемый пост)
Но Вы же должны понимать, что мы не выбираем единичные случаи
как-то не думал об этом. Я думал изначальное утверждение было обобщенным, поэтому может быть опровергнуто частным.

Цитата(profesiachuvak @  22.2.2010,  20:37 Найти цитируемый пост)
рассматриваем нечто вроде среднего арифметического среди всех случаев использования Goto
Ну можно и так. Какую выборку образцов будем рассматривать?

Цитата(profesiachuvak @  22.2.2010,  20:37 Найти цитируемый пост)
Я думаю это аксиома и я не буду даже приводить примеров. 
нууу... А если я начну утверждать что goto привносит господню благодать в код, и скажу что это аксиома? Не надо множить аксиомы, доказывайте.

Цитата(profesiachuvak @  22.2.2010,  20:37 Найти цитируемый пост)
Грамотное, а главное действительное необходимое, употребление GoTo иногда даже полезна и не вносит "неразбериху" в код
Вот, а вы боялись smile

Автор: profesiachuvak 22.2.2010, 21:01
Цитата(bems @  22.2.2010,  20:56 Найти цитируемый пост)
Ну можно и так. Какую выборку образцов будем рассматривать?


 smile Сочту за юмор

Цитата(bems @  22.2.2010,  20:56 Найти цитируемый пост)
А если я начну утверждать что goto привносит господню благодать в код, и скажу что это аксиома


Да ради Бога.

Цитата(bems @  22.2.2010,  20:56 Найти цитируемый пост)
Не надо множить аксиомы, доказывайте.

Аксиомы доказывать не умею. Не учили такому.

Цитата(bems @  22.2.2010,  20:56 Найти цитируемый пост)
Вот, а вы боялись smile


 smile 

Автор: bems 22.2.2010, 21:08
Цитата(profesiachuvak @  22.2.2010,  21:01 Найти цитируемый пост)
Сочту за юмор
Ну это не в большей степени юмор чем все обсужение



Цитата(profesiachuvak @  22.2.2010,  21:01 Найти цитируемый пост)
Цитата(bems @  22.2.2010,  20:56 Найти цитируемый пост)
Вот, а вы боялись smile


 smile  
Это не совсем понял. Если вы имели в виду, что можете сказать мне тоже самое (поправте если ошибаюсь), то обращаю внимание на то, что это вы признали мою точку зрения а не я вашу.

Автор: profesiachuvak 22.2.2010, 21:15
Цитата(bems @  22.2.2010,  21:08 Найти цитируемый пост)
Это не совсем понял.


Это с юморком сказал да. Понятно, что в действительности я не сидел и не трясся от страха. smile 

Цитата(bems @  22.2.2010,  21:08 Найти цитируемый пост)
то обращаю внимание на то, что это вы признали мою точку зрения а не я вашу.


Едва ли. Моя точка зрения остаётся такой же какой была до нашего обсуждения. И я говорю не потому что мне не хочется признавать это, а так есть на самом деле. 
Я лишь согласился что допустил лексическую ошибку в своём первом утверждении.

Цитата(bems @  22.2.2010,  20:56 Найти цитируемый пост)
рассматриваем нечто вроде среднего арифметического среди всех случаев использования Goto
Ну можно и так.


Вот тут Вы согласились со мной. 1:1

Автор: bems 22.2.2010, 21:32
Цитата(profesiachuvak @  22.2.2010,  21:15 Найти цитируемый пост)
Вот тут Вы согласились со мной. 1:1 

Совсем, нет. Я согласился с таким направлением дискуссии (так сказать по регламенту), а не с выводом. Но вы почему-то не хотите быть последовательным и предложить выборку.

Автор: DarkProg 23.2.2010, 14:13
Цитата(bems @  22.2.2010,  20:22 Найти цитируемый пост)
А вы почитайте другого умного человека:
Structured Programming with goto Statements 


Хм, Кнут, а это интересно, надеюсь будет время и почитаю smile

Автор: profesiachuvak 23.2.2010, 20:06
Цитата(bems @  22.2.2010,  21:32 Найти цитируемый пост)
Совсем, нет.


Совсем да. Соглашаясь с таким направлением дискуссии, которое предложил я, Вы соглашаетесь со мной. Логично?

1:1

Цитата(bems @  22.2.2010,  21:32 Найти цитируемый пост)
Но вы почему-то не хотите быть последовательным и предложить выборку. 


Играю в такую же игру как мой оппонент. 

Автор: CodeMonkey 5.3.2010, 03:32
Цитата(profesiachuvak @  22.2.2010,  20:13 Найти цитируемый пост)
Ну нас не слышите, так прочтите рассуждение умного человека на этот счёт: 
Доводы против goto

...там стоит 68-й год...

Цитата(profesiachuvak @  22.2.2010,  20:37 Найти цитируемый пост)
а рассматриваем нечто вроде среднего арифметического среди всех случаев использования Goto.

Окей, сколько программ вы лично видели со злоупотреблениями goto? А сколько без?

(а теперь то же самое, только для with smile )

За свою жизнь я видел довольно много кода с goto ("довольно много" = "не раз и не два"). Но ни разу не видел спагетти-кода с ним. Так в чём проблема?

Автор: bems 5.3.2010, 04:53
О! Как я мог забыть про этот топик?!



Цитата(profesiachuvak @  23.2.2010,  20:06 Найти цитируемый пост)
Соглашаясь с таким направлением дискуссии, которое предложил я, Вы соглашаетесь со мной. Логично?
Не логично, но я не хочу спорить именно об этом. Раз уж я согласился вксти дискуссию в вашем направлении, так давайте её вести! Так что там с конкретными совпадениями/несовпадениями лапши и гоуту?

Цитата(CodeMonkey @  5.3.2010,  03:32 Найти цитируемый пост)
...там стоит 68-й год...
Ну и что изменилось с тех пор в этом отношении?

Цитата(CodeMonkey @  5.3.2010,  03:32 Найти цитируемый пост)
Окей, сколько программ вы лично видели со злоупотреблениями goto? А сколько без?
Я видел очень мало программ с использованием goto, что безусловно свидетельствует о том, что всё прогрессивное человечество отказалось от его использования.

Автор: CodeMonkey 5.3.2010, 11:06
Цитата(bems @  5.3.2010,  04:53 Найти цитируемый пост)
Ну и что изменилось с тех пор в этом отношении?

Мир вокруг smile 

Реалии, которые были в то время, сейчас уже не актуальны. Я не имею ввиду, что теоретические выкладки, что любую программу можно написать без goto, стали неверны. Я имею ввиду, что с практической точки зрения все эти акции "нет goto" начались не с пустого места, а с вполне реальной (в то время) практики его злоупотребления.

Ну и как это применимо сегодня (к Delphi)? Никак. Потому что никакого злоупотребления сегодня нет.

Цитата(bems @  5.3.2010,  04:53 Найти цитируемый пост)
Я видел очень мало программ с использованием goto, что безусловно свидетельствует о том, что всё прогрессивное человечество отказалось от его использования.

Ну, а значит-то это что, по-вашему? Что goto - зло? Или что это полезный инструмент, который иногда необходим, но использовать его лучше бы правильно?
Вон, with есть чуть ли не в трети программ, где ж тут было всё "прогрессивное человечество"?

Автор: bems 5.3.2010, 14:28
Второй раз with протаскиваешь. Он хороший!

Автор: profesiachuvak 5.3.2010, 18:14
Цитата(CodeMonkey @  5.3.2010,  11:06 Найти цитируемый пост)
Ну, а значит-то это что, по-вашему? Что goto - зло? Или что это полезный инструмент, который иногда необходим, но использовать его лучше бы правильно?


Вообще вся дискуссия как раз на эту тему. К ответу на этот вопрос мы так и не пришли. И не придём. Вопрос в другом:

Цитата(bems @  5.3.2010,  04:53 Найти цитируемый пост)
Так что там с конкретными совпадениями/несовпадениями лапши и гоуту?


Фор-ла такая :   ЛАПША = GOTO <=> GOTO = ЛАПША. Проводить доказательство?

P.S.
Цитата(bems @  5.3.2010,  04:53 Найти цитируемый пост)
О! Как я мог забыть про этот топик?!

Я уже подумал, что Вы сдались smile 


Автор: profesiachuvak 5.3.2010, 18:31
Цитата(CodeMonkey @  5.3.2010,  03:32 Найти цитируемый пост)

...там стоит 68-й год...



Отлично! Золотые времена, тогда люди действительно думали, а не копировали чужие статьи, приписывая своё авторство. 

Автор: bems 5.3.2010, 21:35
Цитата(profesiachuvak @  5.3.2010,  18:14 Найти цитируемый пост)
Проводить доказательство?

Рановато. Для начала дайте определение вашему "=", потому что если понимать его так как понимаю я, то формула при внутренней непротиворечивости противоречит вашему утверждению
Цитата(profesiachuvak @  22.2.2010,  20:37 Найти цитируемый пост)
Грамотное, а главное действительное необходимое, употребление GoTo иногда даже полезна и не вносит "неразбериху" в код.

Это же значит что в формуле не привычное мне "=", а какое-то ваше "в основном равно, на множестве, которое я отказываюсь определить"

Добавлено через 2 минуты и 38 секунд
Да, и на всякий случай скобки в формуле проставь. Так, для ясности

Добавлено через 8 минут и 41 секунду
Цитата(CodeMonkey @  5.3.2010,  11:06 Найти цитируемый пост)
Реалии, которые были в то время, сейчас уже не актуальны. Я не имею ввиду, что теоретические выкладки, что любую программу можно написать без goto, стали неверны. Я имею ввиду, что с практической точки зрения все эти акции "нет goto" начались не с пустого места, а с вполне реальной (в то время) практики его злоупотребления.

Ну да, реалии изменились. Но они изменились именно благодаря появлению в то время всех этих выкладок, и этой статьи в том числе. Так что когда кто-то пытается вернуться к гоуту то вполне логично напомнить ему статью датируемую дремучим годом.

Автор: CodeMonkey 6.3.2010, 14:00
Цитата(bems @  5.3.2010,  21:35 Найти цитируемый пост)
Но они изменились именно благодаря появлению в то время всех этих выкладок, и этой статьи в том числе.

Скорее благодаря языкам, где использование goto обычно не нужно. В примере с лапшой на вики не просто так пример кода на http://en.wikipedia.org/wiki/BASIC#Examples ;) - он вас просто подталкивает к использованию goto. Да, языки менялись под воздействием различных работ, но программерская масса (не все, а только мясо) ничего этого не читала, а просто юзала текущий инструмент. Меняется инструмент - меняются и программы.

Поэтому:
Цитата(bems @  5.3.2010,  21:35 Найти цитируемый пост)
Так что когда кто-то пытается вернуться к гоуту то вполне логично напомнить ему статью датируемую дремучим годом. 

имеет смысл только в том случае, если человек нацеливается на лапшу. Поскольку никто, очевидно, этого не делает (в Delphi нет необходимости), то заморачиваться по этому вопросу обычно смысла не имеет. Человек, "пытающийся вернуться к goto", ограничится организацией бесконечного цикла или там выходом из двойного. В голову больше не приходит сценариев, зачем ещё нужен goto. Предостерегать-то и нечего.

Цитата(bems @  5.3.2010,  14:28 Найти цитируемый пост)
Второй раз with протаскиваешь. Он хороший!

Right. Только почему-то я очень часто видел, как с его помощью простреливали себе ногу. Да и сам не раз обжигался.

Автор: k0rvin 10.3.2010, 19:44
Цитата(CodeMonkey @ 6.3.2010,  14:00)
Цитата(bems @  5.3.2010,  14:28 Найти цитируемый пост)
Второй раз with протаскиваешь. Он хороший!

Right. Только почему-то я очень часто видел, как с его помощью простреливали себе ногу. Да и сам не раз обжигался.

я так понимаю (по своему опыту, делфи-2006, может сейчас по-другому), что проблема у with в том, что оно неправильно выстраивает precedence-list (или не выстраивает его вообще), т.е. например при использовании в качестве объекта with какого-нибудь экземпляра TTable внутри метода формы, в теле with частенько компилируются методы не TTable, а TForm (то ли Next, то ли Append, не помню точно), хотя хотелось бы, чтобы преимущество имели методы и свойства объекта with

по поводу goto: если алгоритм требует его, то можно
1) вместо goto перестроить код с использованием исключений -- получается "жирнее", но более правильно с точки зрения структурного подхода;
2) попробовать выделить участок кода в отдельную подпрограмму и использовать Exit -- тоже "жирнее", но правильней

наиболее оптимальным решением видится включение в язык поддержки конструкции наподобии особой формы block из Common Lisp:
Код

(block foo
  ;;; some code here
  (return-from foo some-value)
  ;;; some other code here)


Код

block foo
  // some code here
  Exit foo;
  // some code here
end;

Автор: bems 10.3.2010, 23:30
Цитата(k0rvin @  10.3.2010,  19:44 Найти цитируемый пост)
я так понимаю (по своему опыту, делфи-2006, может сейчас по-другому), что проблема у with в том, что оно неправильно выстраивает precedence-list (или не выстраивает его вообще), т.е. например при использовании в качестве объекта with какого-нибудь экземпляра TTable внутри метода формы, в теле with частенько компилируются методы не TTable, а TForm (то ли Next, то ли Append, не помню точно), хотя хотелось бы, чтобы преимущество имели методы и свойства объекта with
Не праильно понимаешь, все так как и заявлено. Проблема with не техническая, и имхо надуманая

Добавлено через 2 минуты и 7 секунд
Цитата(k0rvin @  10.3.2010,  19:44 Найти цитируемый пост)
1) вместо goto перестроить код с использованием исключений -- получается "жирнее", но более правильно с точки зрения структурного подхода;

Использование исключений не по назначению это тоже big no. Не вижу чем одно могло бы быть лучше другого

Добавлено через 3 минуты и 11 секунд
Цитата(k0rvin @  10.3.2010,  19:44 Найти цитируемый пост)
2) попробовать выделить участок кода в отдельную подпрограмму и использовать Exit -- тоже "жирнее", но правильней
Вариант. Или попробовать перестать бояться гоуту

Автор: k0rvin 10.3.2010, 23:46
Цитата(bems @ 10.3.2010,  23:30)
Цитата(k0rvin @  10.3.2010,  19:44 Найти цитируемый пост)
я так понимаю (по своему опыту, делфи-2006, может сейчас по-другому), что проблема у with в том, что оно неправильно выстраивает precedence-list (или не выстраивает его вообще), т.е. например при использовании в качестве объекта with какого-нибудь экземпляра TTable внутри метода формы, в теле with частенько компилируются методы не TTable, а TForm (то ли Next, то ли Append, не помню точно), хотя хотелось бы, чтобы преимущество имели методы и свойства объекта with
Не праильно понимаешь, все так как и заявлено. Проблема with не техническая, и имхо надуманая

ок, а в чем проблема? и что значит "так и заявлено"? т.е. такое поведение -- норма? имхо тупость, объект with должен рассматриваться в первую очередь, иначе смысла от такого with мало

Цитата(bems @ 10.3.2010,  23:30)

Добавлено @ 23:32
Цитата(k0rvin @  10.3.2010,  19:44 Найти цитируемый пост)
1) вместо goto перестроить код с использованием исключений -- получается "жирнее", но более правильно с точки зрения структурного подхода;

Использование исключений не по назначению это тоже big no. Не вижу чем одно могло бы быть лучше другого

оно лучше идеологически -- более структурный подход, чем goto. Если Вас беспокоит назначение, введите в паскаль/делфи продолжения (continuations) -- будет самое то

Цитата(bems @ 10.3.2010,  23:30)

Добавлено @ 23:33
Цитата(k0rvin @  10.3.2010,  19:44 Найти цитируемый пост)
2) попробовать выделить участок кода в отдельную подпрограмму и использовать Exit -- тоже "жирнее", но правильней
Вариант. Или попробовать перестать бояться гоуту

дык никто и не боится, только единственное обоснованое применение goto -- нелокальный выход, а для этого есть более правильные решения, чем сам goto

Автор: bems 10.3.2010, 23:52
Цитата(k0rvin @  10.3.2010,  23:46 Найти цитируемый пост)
объект with должен рассматриваться в первую очередь
Оно так и есть

Цитата(k0rvin @  10.3.2010,  23:46 Найти цитируемый пост)
оно лучше идеологически
Не лучше. Тоже плохо.

Цитата(k0rvin @  10.3.2010,  23:46 Найти цитируемый пост)
дык никто и не боится, только единственное обоснованое применение goto -- нелокальный выход, а для этого есть более правильные решения, чем сам goto
Более правильное это исключения? Смотри выше

Автор: k0rvin 10.3.2010, 23:59
Цитата(bems @ 10.3.2010,  23:52)
Цитата(k0rvin @  10.3.2010,  23:46 Найти цитируемый пост)
объект with должен рассматриваться в первую очередь
Оно так и есть

по моему опыту -- нет. пример я привел. если в делфи страше 2006 исправили, то ок, проблема решена.

Цитата(bems @ 10.3.2010,  23:52)

Цитата(k0rvin @  10.3.2010,  23:46 Найти цитируемый пост)
оно лучше идеологически
Не лучше. Тоже плохо.

Цитата(k0rvin @  10.3.2010,  23:46 Найти цитируемый пост)
дык никто и не боится, только единственное обоснованое применение goto -- нелокальный выход, а для этого есть более правильные решения, чем сам goto
Более правильное это исключения? Смотри выше


обоснуй. моё обоснование: использование исключений позволяет писать структурированный код и реализовывать нелокальные выходы. альтернативные способы решения этой задачи: продолжения, goto. goto менее всего соответствует структурированному подходу. Ваши возражения?

Автор: bems 11.3.2010, 07:22
Суть возражения в том, что структурность это еще не все. Если в программе исключения являются частью нормального хода выполнения, а не возникают в исключительных ситуациях, то это ###.

Цитата(k0rvin @  10.3.2010,  23:59 Найти цитируемый пост)
пример я привел.
Тестовый проект был бы примером.



Автор: k0rvin 11.3.2010, 07:38
Цитата(bems @ 11.3.2010,  07:22)
Суть возражения в том, что структурность это еще не все. Если в программе исключения являются частью нормального хода выполнения, а не возникают в исключительных ситуациях, то это ###.

это уже другой вопрос

Цитата(bems @ 11.3.2010,  07:22)

Цитата(k0rvin @  10.3.2010,  23:59 Найти цитируемый пост)
пример я привел.
Тестовый проект был бы примером.

ок, вечером запощу

Автор: 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:37)
k0rvin, нет, нельзя. Собственно поскольку оказалось что with работает правильно, то значит его проблема в другой плоскости. Имхо проблемы и нет вовсе, но нужно раскрыть причину его упоминания здесь. Сейчас нарою ссылку.

я имел в виду, что можно закрыть вопрос конкретно по моей претензии, не более =)

Автор: bems 11.3.2010, 20:43
Ну да, у кого бы я еще мог это видеть smile
Вот цитатка
Цитата(CodeMonkey)
Скажите, вот если вы в класс добавляете метод, которого нет ни у него, ни у его предков, вы ведь не ожидаете ничего плохого, верно?

А проблема тут в том, что with смешивает в одну кучу методы текущего класса и класса в with.

Написали вы:

with TSomeClass.Create do
try
...
Show;
...
finally
Free;
end;

Подразумевая, Show - это метод формы. А автор класса TSomeClass потом решил, что было бы неплохо добавить возможность скрытия своих объектов, без удаления. И ввёл Show, Hide и Visible.
Вполне, казалось бы, безобидные изменения, верно? Да вот только теперь ваш код не работает, и попробуйте найти ошибку!


Автор: k0rvin 11.3.2010, 20:45
[QUOTE=profesiachuvak,5.3.2010,  18:14]
Цитата(CodeMonkey @  5.3.2010,  11:06 Найти цитируемый пост)

Фор-ла такая :   ЛАПША = GOTO <=> GOTO = ЛАПША. Проводить доказательство?

вообще не совсем корректная формула, лапша = (в том числе и goto)

например некоторые товарищи утверждают, что с помощью продолжений (continuations) можно довольно легко написать гораздо более запутанный код, чем тот, что может позволить использование goto =)

Автор: bems 11.3.2010, 20:47
Цитата(k0rvin @  11.3.2010,  20:45 Найти цитируемый пост)
вообще не совсем корректная формула, лапша = (в том числе и goto)
Но в то же время и goto = (и лапша тоже) smile

Автор: k0rvin 11.3.2010, 20:52
Цитата(bems @ 11.3.2010,  20:43)
Ну да, у кого бы я еще мог это видеть smile
Вот цитатка
Цитата(CodeMonkey)
Скажите, вот если вы в класс добавляете метод, которого нет ни у него, ни у его предков, вы ведь не ожидаете ничего плохого, верно?

А проблема тут в том, что with смешивает в одну кучу методы текущего класса и класса в with.

Написали вы:

with TSomeClass.Create do
try
...
Show;
...
finally
Free;
end;

Подразумевая, Show - это метод формы. А автор класса TSomeClass потом решил, что было бы неплохо добавить возможность скрытия своих объектов, без удаления. И ввёл Show, Hide и Visible.
Вполне, казалось бы, безобидные изменения, верно? Да вот только теперь ваш код не работает, и попробуйте найти ошибку!

мда, действительно неприятность. видимо стоит отказаться от использования 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
Цитата(CodeMonkey @ 12.3.2010,  10:49)
Ну, вообще-то при разработке класса (class) не менять интерфейс - это перебор. Классы живут и развиваются очень динамично (рефакторинг и т.п.).

1) а не нужно классы разрабатывать, нужно разрабатывать интерфейсы (и/или интерфейсы (interface), а классы нужно реализовывать согласно интерфейсам/интерфейсам

2) в паскале/делфи классы не живут и не развиваются, а являются статичными объектами (объектами не в смысле экземплярами классов, а в более общем смысле =))

Автор: CodeMonkey 14.3.2010, 00:47
user posted image
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 секунд
Цитата(k0rvin @  12.3.2010,  19:03 Найти цитируемый пост)
в паскале/делфи классы не живут и не развиваются, а являются статичными объектами
Статичными во время выполнения. по ходу жизненного цикла проекта они развиваются еще как.

Добавлено через 5 минут и 37 секунд
Цитата(CodeMonkey @  12.3.2010,  10:49 Найти цитируемый пост)
А так - это бомба с часовым механизмом, которая может взорваться при совершенно безобидных действиях.
Как я люблю эту категоричность smile
С умом нужно, и эти случаи будут не частыми.

Автор: CodeMonkey 15.3.2010, 11:18
Цитата(bems @  14.3.2010,  17:25 Найти цитируемый пост)
С умом нужно, и эти случаи будут не частыми.

Да, такое случается не часто. Проблема в том, что вы не можете это контролировать. В случае с goto - вы всегда можете предотвратить его плохой эффект. В случае с with - нет.
Вы установили новую версию компонента и теперь ваша программа с кучей with странно себя ведёт.
Удачи вам отладить это.

Автор: bems 15.3.2010, 14:47
CodeMonkey, а то что было в alt хоть внизу подпиши.

Автор: k0rvin 16.3.2010, 18:22
Цитата(bems @ 14.3.2010,  17:25)
Цитата(k0rvin @  12.3.2010,  19:03 Найти цитируемый пост)
в паскале/делфи классы не живут и не развиваются, а являются статичными объектами
Статичными во время выполнения. по ходу жизненного цикла проекта они развиваются еще как.

они должны это делать только на стадии проектирования, никак не на стадии реализации. конечно это идеальный случай, а практика далека от идеала. поэтому я пожалуй соглашусь с обезьянкой, with с обязательным использованием алиасов -- оптимальное решение.

Автор: Akella 17.3.2010, 11:19
Цитата(k0rvin @  16.3.2010,  18:22 Найти цитируемый пост)
with с обязательным использованием алиасов -- оптимальное решение. 

А зачем тогда with?
Ведь назначение with - это упрощение кода?

Автор: k0rvin 17.3.2010, 13:13
Цитата(Akella @ 17.3.2010,  11:19)
Цитата(k0rvin @  16.3.2010,  18:22 Найти цитируемый пост)
with с обязательным использованием алиасов -- оптимальное решение. 

А зачем тогда with?
Ведь назначение with - это упрощение кода?

Код

with SomeObject as o do begin
  o.Method1;
  o.Method2;
  ...
end;

всяко проще, чем без него

Автор: bems 17.3.2010, 14:50
k0rvin, нет with нужно переделать подругому
Код

with Obj do
 Alias1 as TClass1 do {Тут Alias1 имеет значение Obj и класс TClass1};
 Alias2 as TClass2 do {Тут Alias2 имеет значение Obj и класс TClass2};
 else // ветка, соответствующая текущему with 
 end;

Порядок классов обрабатывается как в except

Автор: cemick 17.3.2010, 15:09
Может быть я не в тему(хотя тут все посты оффтоп), а кто нибудь сталкивался в живую с неправильно работающим "with"  ? 

Автор: CodeMonkey 17.3.2010, 15:35
Цитата(cemick @  17.3.2010,  15:09 Найти цитируемый пост)
а кто нибудь сталкивался в живую с неправильно работающим "with"  ?

Смотря что вы понимаете под "неправильным".

Автор: k0rvin 17.3.2010, 18:30
Цитата(bems @ 17.3.2010,  14:50)
k0rvin, нет with нужно переделать подругому
Код

with Obj do
 Alias1 as TClass1 do {Тут Alias1 имеет значение Obj и класс TClass1};
 Alias2 as TClass2 do {Тут Alias2 имеет значение Obj и класс TClass2};
 else // ветка, соответствующая текущему with 
 end;

Порядок классов обрабатывается как в except

имхо, Вы усложняете

Автор: bems 18.3.2010, 01:00
Цитата(k0rvin @  17.3.2010,  18:30 Найти цитируемый пост)
имхо, Вы усложняете 
Это было бы усложнением если бы я пытался так решить проблему о которой говорил CodeМonkey. А я тут двух зайцев.
Согласись, бывают же случаи (и не то что бы редко), когда приходится писать так
Код

if Obj is TClass1
   then //use TClass1(Obj)
   else if Obj is TClass2
           then //use TClass2(Obj)

Мой вариант как раз для вот таких случаев, но добавляет сервис компилятора: в then-ветке объект имеет тот тип, который только что был успешно протестирован. Это безопаснее, потому что не требует приведения типа. И пример не совсем мой, нечто подобное кажется есть в Обероне.

Автор: k0rvin 18.3.2010, 18:20
ясно... сегодня я вдруг подумал, а ведь у uses такое же поведение, как и у with, т.е. например

Код

program test;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Unit1 in 'Unit1.pas',
  Unit2 in 'Unit2.pas';

begin
  Foo;
  ReadLn;
end.


Код

unit Unit1;

interface

procedure Foo;

implementation

procedure Foo;
begin
  WriteLn( 'Unit1.Foo' );
end;

end.


Код

unit Unit2;

interface

implementation

procedure Foo;
begin
  WriteLn( 'Unit2.Foo' );
end;

end.


выведет в stdin "Unit1.Foo", но стоит добавить декларацию Foo в интерфейсную часть Unit2, как мы получаем тот же эффект, что и с with.

Автор: cemick 18.3.2010, 19:09
обсуждение надуманной проблемы, ни разу не испытывал каких то проблем при использовании with, как и при поиске методов в модулей. Если и возникает ошибочное обращение, то это легко отлавливается. 

Автор: bems 19.3.2010, 07:56
Цитата(k0rvin @  18.3.2010,  18:20 Найти цитируемый пост)
выведет в stdin "Unit1.Foo", но стоит добавить декларацию Foo в интерфейсную часть Unit2, как мы получаем тот же эффект, что и с with. 

Ты наверное хотел сказать stdout
Ну да, этот эффект от порядка юнитов известен и даже используется (для тспользования базового компонента в дизайнтайме и подмены его кастомным наследником в рантайме)

Автор: CodeMonkey 19.3.2010, 12:42
Цитата(cemick @  18.3.2010,  19:09 Найти цитируемый пост)
ни разу не испытывал каких то проблем при использовании with

Это не надуманная проблема. Часто ли вы используете with и модифицируете классы, участвующие в нём? Если бы вы делали это достаточно часто, то уже набили бы себе несколько шишек. И ловится это не так просто, как вам кажется - потом будете долго плеваться.

Автор: cemick 19.3.2010, 12:59
Цитата(CodeMonkey @  19.3.2010,  12:42 Найти цитируемый пост)
асто ли вы используете with и модифицируете классы

Сделал поиск по рабочему проекту слова "with" (whole word only) 2793 matches.

Автор: k0rvin 19.3.2010, 19:50
Цитата(bems @ 19.3.2010,  07:56)
Цитата(k0rvin @  18.3.2010,  18:20 Найти цитируемый пост)
выведет в stdin "Unit1.Foo", но стоит добавить декларацию Foo в интерфейсную часть Unit2, как мы получаем тот же эффект, что и с with. 

Ты наверное хотел сказать stdout
Ну да, этот эффект от порядка юнитов известен и даже используется (для тспользования базового компонента в дизайнтайме и подмены его кастомным наследником в рантайме)

да, хотел... но перепутал =)

а зачем "использовать базовый компонент в дизайнтайме и подменять его кастомным наследником в рантайме"?

и, ты наверное хотел сказать в compile-time'е, а не рантайме? =)

Автор: CodeMonkey 22.3.2010, 11:15
Цитата(cemick @  19.3.2010,  12:59 Найти цитируемый пост)
2793 matches

Что-то мне подсказывает, что все они - однотиповые использования статических классов 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 @  19.3.2010,  19:50 Найти цитируемый пост)
а зачем "использовать базовый компонент в дизайнтайме и подменять его кастомным наследником в рантайме"?

Если нужен именно наследник, и ты хочешь полноценную работу с дизайнером. Тут можно зарегистрировать наследник и ложить на форму его, но это не всегда удобно, многие любят чтобы проект собирался без манипуляций со средой вроде установки компонент.

Автор: k0rvin 24.3.2010, 19:31
Цитата(bems @ 22.3.2010,  15:05)
k0rvin, я хотел сказать то что сказал.

зачем менять класс в рантайме, если лучше и правильней в случае делфи/паскаля это сделать при компиляции.

вообще хотелось бы посмотреть как Вы будете менять класс объекта в рантайме в делфи =)

Автор: bems 24.3.2010, 21:31
Цитата(k0rvin @  24.3.2010,  19:31 Найти цитируемый пост)
зачем менять класс в рантайме, если лучше и правильней в случае делфи/паскаля это сделать при компиляции.
При компиляции конечно же

Цитата(k0rvin @  24.3.2010,  19:31 Найти цитируемый пост)
вообще хотелось бы посмотреть как Вы будете менять класс объекта в рантайме в делфи =) 

Во-первых, документированная альтернатива подсовыванию юнита с одноименным классом, это именно обработка события в рантайме (при этом не изменяется класс существующего объекта, а перед созданием читаемого из ресурса компонента есть возможность указать свой класс). Но как показывает практика, подмена класса при компиляции выгоднее. 
Во-вторых можно сменить класс и существующему объекту, но это допустимо только в исследовательских целях.

Автор: k0rvin 24.3.2010, 22:52
Цитата(bems @ 24.3.2010,  21:31)
Во-первых, документированная альтернатива подсовыванию юнита с одноименным классом, это именно обработка события в рантайме (при этом не изменяется класс существующего объекта, а перед созданием читаемого из ресурса компонента есть возможность указать свой класс)

эээ... разве компоновка модулей в экзешник происходит в рантайме? 

Автор: bems 25.3.2010, 00:07
Цитата(bems @  24.3.2010,  21:31 Найти цитируемый пост)
документированная альтернатива подсовыванию юнита с одноименным классом, это именно обработка события в рантайме

Тут я говорил про альтернативу. Она да, рантаймовая.

Цитата(k0rvin @  24.3.2010,  22:52 Найти цитируемый пост)
разве компоновка модулей в экзешник происходит в рантайме?  
Ну ясно что при компиляции. Но тут 
Цитата(bems @  19.3.2010,  07:56 Найти цитируемый пост)
для тспользования базового компонента в дизайнтайме и подмены его кастомным наследником в рантайме
имелось в виду противопоставление. Вот дизайнеру известен один класс TListView, а в рантайме будет создан экземпляр другого TListView. Конечно же собственно подмена в этом случае делается при компиляции.

Автор: Argilius 1.7.2010, 14:04
Цитата(DarkProg @ 28.10.2009,  16:56)
физическая модель или еще что-нибудь не относящееся напрямую к математике или физике

Это как физическая модель может не относится к физике  smile 
Напиши графики биоритмов человека или предсказание судьбы по дате рождения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)