Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизGoto Найти похожие ветки
← →
Андрей Сенченко © (2004-04-21 13:36) [40]Verg © (21.04.04 13:05) [36]
В приведенном Вами коде ничто не мешает поставить условие
if false goto
вместо
continue
..
until true;
GetMem() - FreeMem реализуется и в этом случае без использования защищенных блоков.
← →
Андрей Сенченко © (2004-04-21 13:36) [40]Verg © (21.04.04 13:05) [36]
В приведенном Вами коде ничто не мешает поставить условие
if false goto
вместо
continue
..
until true;
GetMem() - FreeMem реализуется и в этом случае без использования защищенных блоков.
← →
KSergey © (2004-04-21 13:37) [41]> [36] Verg © (21.04.04 13:05)
Нет, давайте не будет перевирать.
Язык на котором реально все это рассматривалось не имел механизма исключений.
А понимаю, что можно придумать ситуацию, когда это какбы "будет хорошо", но тогда уж проще (и логичнее, по-моему) действительно воспользоваться механизмом исключений.
Да и все же странно прмер ваш выглядит: с одной стороны - "странный" (да!) "цикл", с другой - структурная обработка исключений.
Это пример явно неудачного кода в плане смешения стилей
← →
KSergey © (2004-04-21 13:37) [41]> [36] Verg © (21.04.04 13:05)
Нет, давайте не будет перевирать.
Язык на котором реально все это рассматривалось не имел механизма исключений.
А понимаю, что можно придумать ситуацию, когда это какбы "будет хорошо", но тогда уж проще (и логичнее, по-моему) действительно воспользоваться механизмом исключений.
Да и все же странно прмер ваш выглядит: с одной стороны - "странный" (да!) "цикл", с другой - структурная обработка исключений.
Это пример явно неудачного кода в плане смешения стилей
← →
WebErr © (2004-04-21 13:40) [42]ИМХО [38]
← →
WebErr © (2004-04-21 13:40) [42]ИМХО [38]
← →
Григорьев Антон (2004-04-21 13:44) [43]
> ZrenBy © (21.04.04 12:29) [34]
> Я как-то год-полтора назад одному противнику goto
> предлагал переписать одну процедурку, использующую goto,
> без использования оного.
>
> Но при этом ставил два условия.
>
> 1. Не должно быть вызовов функций/процедур.
> 2. Не должно быть повторяющегося кода.
>
> Противник goto тогда вызов не принял.
Осталось предложить не использовать JMP в ассемблере...
Как раз о том и речь, что структурирование программы позволяет избавиться от goto. А без инструментов структурирования - конечно, goto необходим.
> KSergey © (21.04.04 12:53) [35]
> Для меня апогеем, убедившим в том, что использовать goto
> - вполне легитимно, явился такой фрагмент кода в одном примере.
> Причем я приведу лишь макет, на нем-то все видно, а реальный
> код был куда больше, со вложенными циклами, весь этот макет
> не сразу проглядывался, а потому я долго (минут 20, может
> я тупой?) силился понять зафиг так было делать (пример будет
> на паскале):
Ну и что? Человек просто не умеет программировать. Не надо делать из этого далеко идущие выводы. Вот код, который делает то же самое без goto и без однократного цикла:.......
if not ... then
begin
....
end;
> WebErr © (21.04.04 13:22) [38]
> Должна быть в Делфи процедура неокального перехода по метке,
> так как в Borland C++ (ANSI standard) она есть!
А стандарты C++ здесь вообще при чём? Delphi - это, строго говоря, никем не стандартизированный язык, и никакие чужие стандарты ему не указ. В конце концов, в Delphi ещё много чего нет, что есть в C++, и слава богу, что нет.
← →
Григорьев Антон (2004-04-21 13:44) [43]
> ZrenBy © (21.04.04 12:29) [34]
> Я как-то год-полтора назад одному противнику goto
> предлагал переписать одну процедурку, использующую goto,
> без использования оного.
>
> Но при этом ставил два условия.
>
> 1. Не должно быть вызовов функций/процедур.
> 2. Не должно быть повторяющегося кода.
>
> Противник goto тогда вызов не принял.
Осталось предложить не использовать JMP в ассемблере...
Как раз о том и речь, что структурирование программы позволяет избавиться от goto. А без инструментов структурирования - конечно, goto необходим.
> KSergey © (21.04.04 12:53) [35]
> Для меня апогеем, убедившим в том, что использовать goto
> - вполне легитимно, явился такой фрагмент кода в одном примере.
> Причем я приведу лишь макет, на нем-то все видно, а реальный
> код был куда больше, со вложенными циклами, весь этот макет
> не сразу проглядывался, а потому я долго (минут 20, может
> я тупой?) силился понять зафиг так было делать (пример будет
> на паскале):
Ну и что? Человек просто не умеет программировать. Не надо делать из этого далеко идущие выводы. Вот код, который делает то же самое без goto и без однократного цикла:.......
if not ... then
begin
....
end;
> WebErr © (21.04.04 13:22) [38]
> Должна быть в Делфи процедура неокального перехода по метке,
> так как в Borland C++ (ANSI standard) она есть!
А стандарты C++ здесь вообще при чём? Delphi - это, строго говоря, никем не стандартизированный язык, и никакие чужие стандарты ему не указ. В конце концов, в Delphi ещё много чего нет, что есть в C++, и слава богу, что нет.
← →
Verg © (2004-04-21 13:58) [44]
> KSergey © (21.04.04 13:37) [41]
Я ничего не перевирал, и не надо на меня смотреть как на злобного противника goto. Я такой же противник goto, как вы - противники защищенных блоков... ни больше, ни меньше.
А хотел я сказать, что покинуть защищеный блок с помощью goto никто просто не даст.
← →
Verg © (2004-04-21 13:58) [44]
> KSergey © (21.04.04 13:37) [41]
Я ничего не перевирал, и не надо на меня смотреть как на злобного противника goto. Я такой же противник goto, как вы - противники защищенных блоков... ни больше, ни меньше.
А хотел я сказать, что покинуть защищеный блок с помощью goto никто просто не даст.
← →
Verg © (2004-04-21 14:00) [45]
> Андрей Сенченко © (21.04.04 13:36) [40]
В приведенном мною коде специально поставлены многоточия, так что, мешает там что-то чему-то или не мешает - я бы на вашем месте однозначничать не стал.
← →
Verg © (2004-04-21 14:00) [45]
> Андрей Сенченко © (21.04.04 13:36) [40]
В приведенном мною коде специально поставлены многоточия, так что, мешает там что-то чему-то или не мешает - я бы на вашем месте однозначничать не стал.
← →
WebErr © (2004-04-21 14:02) [46]Вообще нелокальный goto можно заменить на вызов определённой функции, с предварительной установкой некоего флага!
← →
WebErr © (2004-04-21 14:02) [46]Вообще нелокальный goto можно заменить на вызов определённой функции, с предварительной установкой некоего флага!
← →
Андрей Сенченко © (2004-04-21 14:09) [47]Verg © (21.04.04 14:00) [45]
мешает там что-то чему-то или не мешает
Имелось в виду все-таки тривиальное содержание. А так там можно и HALT всадить.
Насколько я помню по форуму - Вы неплохо разбираетесь в АСМе. Я - нет, мне сложно оценивать, но если не сложно - просветите пожалуйста - чем будут отличаться машинные интрукции выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок Finally ? На мой взгляд - одно и то же. Грубый тык компилятору куда идти дальше за кодом. Разница в названиях или в чем-то более ощутимом ?
← →
Андрей Сенченко © (2004-04-21 14:09) [47]Verg © (21.04.04 14:00) [45]
мешает там что-то чему-то или не мешает
Имелось в виду все-таки тривиальное содержание. А так там можно и HALT всадить.
Насколько я помню по форуму - Вы неплохо разбираетесь в АСМе. Я - нет, мне сложно оценивать, но если не сложно - просветите пожалуйста - чем будут отличаться машинные интрукции выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок Finally ? На мой взгляд - одно и то же. Грубый тык компилятору куда идти дальше за кодом. Разница в названиях или в чем-то более ощутимом ?
← →
Verg © (2004-04-21 14:32) [48]
> Андрей Сенченко © (21.04.04 14:09) [47]
> Verg © (21.04.04 14:00) [45]
>
> мешает там что-то чему-то или не мешает
>
> Имелось в виду все-таки тривиальное содержание. А так там
> можно и HALT всадить.
При чем тут halt? Да пользуйтесь вы наздоровье goto. Я что, запрещаю? :)
>
> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?
При чем тут ASM вообще?
Речь идет об аварийном выходе из try блока, который используется там, где идет речь об обязательности (гарантированности) освобождения некоторых, ранее взятых на время ресурсов (память, файл, вход в критическую секцию и т.д. и т.п.).
← →
Verg © (2004-04-21 14:32) [48]
> Андрей Сенченко © (21.04.04 14:09) [47]
> Verg © (21.04.04 14:00) [45]
>
> мешает там что-то чему-то или не мешает
>
> Имелось в виду все-таки тривиальное содержание. А так там
> можно и HALT всадить.
При чем тут halt? Да пользуйтесь вы наздоровье goto. Я что, запрещаю? :)
>
> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?
При чем тут ASM вообще?
Речь идет об аварийном выходе из try блока, который используется там, где идет речь об обязательности (гарантированности) освобождения некоторых, ранее взятых на время ресурсов (память, файл, вход в критическую секцию и т.д. и т.п.).
← →
WebErr © (2004-04-21 14:35) [49]
> Андрей Сенченко © (21.04.04 14:09) [47]
Если Вы про Асм, то там кроме goto чего только нету!!!
И if нету, и else нету, и даже for нету и while!
Только одиноко стоящий call среди кучи всяких повторяющихся goto типа jl, je, jz, ja, jb, jg, ... и так до 00
← →
WebErr © (2004-04-21 14:35) [49]
> Андрей Сенченко © (21.04.04 14:09) [47]
Если Вы про Асм, то там кроме goto чего только нету!!!
И if нету, и else нету, и даже for нету и while!
Только одиноко стоящий call среди кучи всяких повторяющихся goto типа jl, je, jz, ja, jb, jg, ... и так до 00
← →
Fay © (2004-04-21 14:37) [50]о тои и речь
← →
Fay © (2004-04-21 14:37) [50]о тои и речь
← →
Григорьев Антон (2004-04-21 14:53) [51]
> Андрей Сенченко ©
> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?
Разница в том, что с помощью Exit компилятор можно послать только за пределы цикла, а с помощью goto можно, кроме этого, наделать ещё кучу вредных вещей, в которых потом запутаешься.
← →
Григорьев Антон (2004-04-21 14:53) [51]
> Андрей Сенченко ©
> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?
Разница в том, что с помощью Exit компилятор можно послать только за пределы цикла, а с помощью goto можно, кроме этого, наделать ещё кучу вредных вещей, в которых потом запутаешься.
← →
Fay © (2004-04-21 14:56) [52]"кучу вредных вещей" можно с помощью чего угодно. В том числе TCurveHands.
← →
Fay © (2004-04-21 14:56) [52]"кучу вредных вещей" можно с помощью чего угодно. В том числе TCurveHands.
← →
Андрей Сенченко © (2004-04-21 14:56) [53]Verg © (21.04.04 14:32) [48]
Вы наверное не совсем поняли .. я и без GOTO куда угодно выскочу.
Я, откровенно говоря, уже потерялся в ходе Ваших рассуждений.
Сначала Вы делаете среди многочисленных многоточий выделение и освобождение памяти в защищенном блоке, типа по-другому нельзя.
Можно. Аналогичную структуру можно описать и при помощи GOTO однозначно. Дольше - но можно.
Потом оказывается, что среди тех самых многочисленных многоточий может скрываться еще ЧТО-ТО, что именно - многозначительное же молчание.
Потом оказывается, что все это вообще не имело быть значимым потому что речь шла собственно даже не о GOTO как таковом, а об обязательности (гарантированности) освобождения некоторых, ранее взятых на время ресурсов ( © Verg 2004 )
Откровенно говоря .. мы вообще об одном и том же общаемся или нет ?
Я имел в виду только то, что с точки зрения структуры программы выходы
If <...> Goto -------|
<---------|
иtry
<...>
EXIT ----------|
finally <------|
ничем не отличаются - ни в машинных кодах, ни собственно на Паскале. Буковки только разные, а смысл один - прямо указываем на выход из цикла ( процедуры и т.п. )
То есть я рассматривал этот вопрос только с той точки зрения, что указнный Вами метод - красивый способ не использовать оператор GOTO как таковой. О прямом назначении конструкции try - finally речи не шло, только об этой конкретной фиче.
Извините уж, ежели что не так.
← →
Андрей Сенченко © (2004-04-21 14:56) [53]Verg © (21.04.04 14:32) [48]
Вы наверное не совсем поняли .. я и без GOTO куда угодно выскочу.
Я, откровенно говоря, уже потерялся в ходе Ваших рассуждений.
Сначала Вы делаете среди многочисленных многоточий выделение и освобождение памяти в защищенном блоке, типа по-другому нельзя.
Можно. Аналогичную структуру можно описать и при помощи GOTO однозначно. Дольше - но можно.
Потом оказывается, что среди тех самых многочисленных многоточий может скрываться еще ЧТО-ТО, что именно - многозначительное же молчание.
Потом оказывается, что все это вообще не имело быть значимым потому что речь шла собственно даже не о GOTO как таковом, а об обязательности (гарантированности) освобождения некоторых, ранее взятых на время ресурсов ( © Verg 2004 )
Откровенно говоря .. мы вообще об одном и том же общаемся или нет ?
Я имел в виду только то, что с точки зрения структуры программы выходы
If <...> Goto -------|
<---------|
иtry
<...>
EXIT ----------|
finally <------|
ничем не отличаются - ни в машинных кодах, ни собственно на Паскале. Буковки только разные, а смысл один - прямо указываем на выход из цикла ( процедуры и т.п. )
То есть я рассматривал этот вопрос только с той точки зрения, что указнный Вами метод - красивый способ не использовать оператор GOTO как таковой. О прямом назначении конструкции try - finally речи не шло, только об этой конкретной фиче.
Извините уж, ежели что не так.
← →
TUser © (2004-04-21 15:01) [54]Предлагаю организовать Добровольное общество борьбы с Goto, asm, Си, указателями, absolute"ами, незакомментированными строками и прочим стремом, который заставляет кодера думать, о низкоуровневых вещах, отвлекая его от обдумывания алгоритма программы.
А вообще - Goto я давно уже не использовал в реально необходимых прогах. Просто мысли такой не возникает, когда алгоритм обдумываю. Сейчас сижу с асмом разбираюсь - перевожу проги с Паскаля на MIXAL. Первым делом - преобразую каждую прогу так, чтобы убрать все циклы и переделать их на if - Goto. А в реальных прогах высокго уровня этот оператор не нужен.
← →
TUser © (2004-04-21 15:01) [54]Предлагаю организовать Добровольное общество борьбы с Goto, asm, Си, указателями, absolute"ами, незакомментированными строками и прочим стремом, который заставляет кодера думать, о низкоуровневых вещах, отвлекая его от обдумывания алгоритма программы.
А вообще - Goto я давно уже не использовал в реально необходимых прогах. Просто мысли такой не возникает, когда алгоритм обдумываю. Сейчас сижу с асмом разбираюсь - перевожу проги с Паскаля на MIXAL. Первым делом - преобразую каждую прогу так, чтобы убрать все циклы и переделать их на if - Goto. А в реальных прогах высокго уровня этот оператор не нужен.
← →
Андрей Сенченко © (2004-04-21 15:03) [55]Григорьев Антон (21.04.04 14:53) [51]
EXIT - только за пределы цикла ... ДА НУ !!!!
procedure AutoKiller;
begin
EXIT;
showmessage("Жить хочу !");
end;
Как Вы думаете - мы увидим когда-нибудь тот самый message ?
А где тут цикЛ ?
← →
Андрей Сенченко © (2004-04-21 15:03) [55]Григорьев Антон (21.04.04 14:53) [51]
EXIT - только за пределы цикла ... ДА НУ !!!!
procedure AutoKiller;
begin
EXIT;
showmessage("Жить хочу !");
end;
Как Вы думаете - мы увидим когда-нибудь тот самый message ?
А где тут цикЛ ?
← →
Smithson © (2004-04-21 15:07) [56]Блок try finally создает специальный SEH-фрэйм (это системный объект). Насколько я помню, эти фрэймы ограничены по вложености (32, кажется) ну и на их создание-удаление тратиться код. При срабатывании этого фрейма возбуждается исключение (процессором, по старому, по-досовски - прерывание). Goto ничего этого не делает, это банальный long jump. Так что ответ на вопрос [53] отрицательный - это не просто не одно и тоже, это совсем разные вещи.
← →
Smithson © (2004-04-21 15:07) [56]Блок try finally создает специальный SEH-фрэйм (это системный объект). Насколько я помню, эти фрэймы ограничены по вложености (32, кажется) ну и на их создание-удаление тратиться код. При срабатывании этого фрейма возбуждается исключение (процессором, по старому, по-досовски - прерывание). Goto ничего этого не делает, это банальный long jump. Так что ответ на вопрос [53] отрицательный - это не просто не одно и тоже, это совсем разные вещи.
← →
Verg © (2004-04-21 15:10) [57]Андрей Сенченко © (21.04.04 14:56) [53]
Я имел в виду только то, что с точки зрения структуры программы выходы
If <...> Goto -------|
<---------|
и
try
<...>
EXIT ----------|
finally <------|
ничем не отличаются - ни в машинных кодах, ни собственно на Паскале. Буковки только разные, а смысл один - прямо указываем на выход из цикла ( процедуры и т.п. )
А теперь это:procedure F1(Par: boolean);
begin
try
if Par then exit;
Windows.Beep(1000, 100);
finally;
ShowMessage("Выход 1");
end;
ShowMessage("Выход 2");
end;
С goto:
procedure F1(Par: boolean);
label l1;
begin
if Par then goto l1;
Windows.Beep(1000, 100);
l1:ShowMessage("Выход 1");
ShowMessage("Выход 2");
end;
← →
Verg © (2004-04-21 15:10) [57]Андрей Сенченко © (21.04.04 14:56) [53]
Я имел в виду только то, что с точки зрения структуры программы выходы
If <...> Goto -------|
<---------|
и
try
<...>
EXIT ----------|
finally <------|
ничем не отличаются - ни в машинных кодах, ни собственно на Паскале. Буковки только разные, а смысл один - прямо указываем на выход из цикла ( процедуры и т.п. )
А теперь это:procedure F1(Par: boolean);
begin
try
if Par then exit;
Windows.Beep(1000, 100);
finally;
ShowMessage("Выход 1");
end;
ShowMessage("Выход 2");
end;
С goto:
procedure F1(Par: boolean);
label l1;
begin
if Par then goto l1;
Windows.Beep(1000, 100);
l1:ShowMessage("Выход 1");
ShowMessage("Выход 2");
end;
← →
Андрей Сенченко © (2004-04-21 15:21) [58]Verg © (21.04.04 15:10) [57]
Вы уж меня простите, но сам по себе смысл структуры try-finally-end, если Вы его сравниваете с if-then-else предполагает наличие выхода, фактически описываемого как
IF
< в защищенном блоке все хорошо >
THEN
< пищим себе согласно кода Verg © >
ELSE GOTO FINALLY
Во втором примере Вы это ELSE сознательно опустили или просто привели некорректное сравнение ?
← →
Андрей Сенченко © (2004-04-21 15:21) [58]Verg © (21.04.04 15:10) [57]
Вы уж меня простите, но сам по себе смысл структуры try-finally-end, если Вы его сравниваете с if-then-else предполагает наличие выхода, фактически описываемого как
IF
< в защищенном блоке все хорошо >
THEN
< пищим себе согласно кода Verg © >
ELSE GOTO FINALLY
Во втором примере Вы это ELSE сознательно опустили или просто привели некорректное сравнение ?
← →
Андрей Сенченко © (2004-04-21 15:23) [59]Smithson © (21.04.04 15:07) [56]
Теперь стало понятнее. Спасибо.
← →
Андрей Сенченко © (2004-04-21 15:23) [59]Smithson © (21.04.04 15:07) [56]
Теперь стало понятнее. Спасибо.
← →
Verg © (2004-04-21 15:29) [60]
> Андрей Сенченко © (21.04.04 15:21) [58]
Я уже тоже не понимаю о чем мы спорим... Ну да ладно...
> IF
> < в защищенном блоке все хорошо >
> THEN
> < пищим себе согласно кода Verg © >
> ELSE GOTO FINALLY
Ты перепиши этот кусок так, прямо на паскале.
А то непонятно, куда этот else goto finally.
← →
Verg © (2004-04-21 15:29) [60]
> Андрей Сенченко © (21.04.04 15:21) [58]
Я уже тоже не понимаю о чем мы спорим... Ну да ладно...
> IF
> < в защищенном блоке все хорошо >
> THEN
> < пищим себе согласно кода Verg © >
> ELSE GOTO FINALLY
Ты перепиши этот кусок так, прямо на паскале.
А то непонятно, куда этот else goto finally.
← →
WebErr © (2004-04-21 15:36) [61]В общем вот что, ребята-мастерята, пишите-ка вы все на Асме, там этих goto навалом! А в Делфи можно всегда и без goto обойтись! И вообще, что такое goto и label? Никогда их не встречал ни в одном нормальном учебнике по Делфи!
← →
WebErr © (2004-04-21 15:36) [61]В общем вот что, ребята-мастерята, пишите-ка вы все на Асме, там этих goto навалом! А в Делфи можно всегда и без goto обойтись! И вообще, что такое goto и label? Никогда их не встречал ни в одном нормальном учебнике по Делфи!
← →
Fay © (2004-04-21 15:52) [62]Поищи в нормальном учебнике по Object Pascal
← →
Fay © (2004-04-21 15:52) [62]Поищи в нормальном учебнике по Object Pascal
← →
WebErr © (2004-04-21 15:58) [63]
> Fay © (21.04.04 15:52) [62]
Это ненормальные учебники, которые учат goto!!! :))))
Слишком низкоуровневая команда для Делфи!!!
← →
WebErr © (2004-04-21 15:58) [63]
> Fay © (21.04.04 15:52) [62]
Это ненормальные учебники, которые учат goto!!! :))))
Слишком низкоуровневая команда для Делфи!!!
← →
Fay © (2004-04-21 16:01) [64]2WebErr © (21.04.04 15:58) [63]
Бред
← →
Fay © (2004-04-21 16:01) [64]2WebErr © (21.04.04 15:58) [63]
Бред
← →
Андрей Сенченко © (2004-04-21 16:05) [65]Verg © (21.04.04 15:29) [60]
label lb1,lb2;
begin
if <все хорошо>
then goto lb1
else goto lb2
lb1 : < пищим ! >
golo lb2
lb2 : <не пищим>
end;
прямо на паскале, как просили. ( мог правда ошибиться с синтаксисом - в жизни ни разу не пользовался метками начиная с 5-го паскаля )
Могу то же самое изобразить в БАТ-файле например или на бэйсике или например на скрипте кассовой программы "Профи-Т 4.0" или складской "Домино 7.4" - там то я обхожусь как-то без try-finally-end - приходится, понимаете, обходиться по причине отсутствия даже намеков на такую структуру, не жируем. Но принцип то тот же.
← →
Андрей Сенченко © (2004-04-21 16:05) [65]Verg © (21.04.04 15:29) [60]
label lb1,lb2;
begin
if <все хорошо>
then goto lb1
else goto lb2
lb1 : < пищим ! >
golo lb2
lb2 : <не пищим>
end;
прямо на паскале, как просили. ( мог правда ошибиться с синтаксисом - в жизни ни разу не пользовался метками начиная с 5-го паскаля )
Могу то же самое изобразить в БАТ-файле например или на бэйсике или например на скрипте кассовой программы "Профи-Т 4.0" или складской "Домино 7.4" - там то я обхожусь как-то без try-finally-end - приходится, понимаете, обходиться по причине отсутствия даже намеков на такую структуру, не жируем. Но принцип то тот же.
← →
Андрей Сенченко © (2004-04-21 16:13) [66]эхма ... вот так безусловно
then goto lb2
else goto lb1
а то пищать не по делу будем.
← →
Андрей Сенченко © (2004-04-21 16:13) [66]эхма ... вот так безусловно
then goto lb2
else goto lb1
а то пищать не по делу будем.
← →
WebErr © (2004-04-21 16:13) [67]Паскаль:
if AllGood then
NePisk
else
Pisk;
Ассемблер:
cmp AllGood, 0
je label1; или jz label1 - вот он бред!
call NePisk
jmp label2
label1:
call Pisk
label2:
Нормально?! :((((
Вот они - ваши любимые "Готы" - переходите на Асм!!! :(
← →
WebErr © (2004-04-21 16:13) [67]Паскаль:
if AllGood then
NePisk
else
Pisk;
Ассемблер:
cmp AllGood, 0
je label1; или jz label1 - вот он бред!
call NePisk
jmp label2
label1:
call Pisk
label2:
Нормально?! :((((
Вот они - ваши любимые "Готы" - переходите на Асм!!! :(
← →
WebErr © (2004-04-21 16:15) [68]Удалено модератором
← →
WebErr © (2004-04-21 16:15) [68]Удалено модератором
← →
Fay © (2004-04-21 16:16) [69]Удалено модератором
← →
Fay © (2004-04-21 16:16) [69]Удалено модератором
← →
Verg © (2004-04-21 16:18) [70]Андрей Сенченко © (21.04.04 16:05) [65]
При чем тут "Пищим не Пищим".
procedure F1(Par: boolean);
begin
try
if Par then exit;
Windows.Beep(1000, 100); // №1
finally;
ShowMessage("Выход 1"); // №2
end;
ShowMessage("Выход 2"); // №3
end;
Ты напиши ее полный (вместе с ShowMessage) аналог, но на goto исходя из своей концепции, что exit в защищенном блоке - это все равно, что goto на участок кода в finally, но без защищенного блока.
Par = true Выполнится только №2
par = false выполнится №1, №2, №3
Я надеюсь, что утренний диалог с Gero был прочитан?
> там то я обхожусь как-то без try-finally-end - приходится,
> понимаете, обходиться по причине отсутствия даже намеков
> на такую структуру, не жируем.
Да пойми ты: я не возражаю, пожалуйста. Я же не утверждаю, что отдельно взятую, самодостаточную (не испоьзующую сторонних библиотек, компонентов) программу невозможно написать не прибегнув к защ. блокам. Я же не утверждаю, что goto вообще нигде и никогда не нужен.
← →
Verg © (2004-04-21 16:18) [70]Андрей Сенченко © (21.04.04 16:05) [65]
При чем тут "Пищим не Пищим".
procedure F1(Par: boolean);
begin
try
if Par then exit;
Windows.Beep(1000, 100); // №1
finally;
ShowMessage("Выход 1"); // №2
end;
ShowMessage("Выход 2"); // №3
end;
Ты напиши ее полный (вместе с ShowMessage) аналог, но на goto исходя из своей концепции, что exit в защищенном блоке - это все равно, что goto на участок кода в finally, но без защищенного блока.
Par = true Выполнится только №2
par = false выполнится №1, №2, №3
Я надеюсь, что утренний диалог с Gero был прочитан?
> там то я обхожусь как-то без try-finally-end - приходится,
> понимаете, обходиться по причине отсутствия даже намеков
> на такую структуру, не жируем.
Да пойми ты: я не возражаю, пожалуйста. Я же не утверждаю, что отдельно взятую, самодостаточную (не испоьзующую сторонних библиотек, компонентов) программу невозможно написать не прибегнув к защ. блокам. Я же не утверждаю, что goto вообще нигде и никогда не нужен.
← →
nikkie © (2004-04-21 16:20) [71]>там то я обхожусь как-то без try-finally-end
существуют еще языки, где невозможны локальные переменные - только глобальные. и ничего, обходятся люди. означает ли это, что стиль программирования с использованием этих языков стоит переносить в более развитые языки?
← →
nikkie © (2004-04-21 16:20) [71]>там то я обхожусь как-то без try-finally-end
существуют еще языки, где невозможны локальные переменные - только глобальные. и ничего, обходятся люди. означает ли это, что стиль программирования с использованием этих языков стоит переносить в более развитые языки?
← →
Fay © (2004-04-21 16:23) [72]2nikkie © (21.04.04 16:20) [71]
Вас не удивляет присутствие goto в таких языках?
← →
Fay © (2004-04-21 16:23) [72]2nikkie © (21.04.04 16:20) [71]
Вас не удивляет присутствие goto в таких языках?
← →
nikkie © (2004-04-21 16:33) [73]>Fay
>Вас не удивляет присутствие goto в таких языках?
не удивляет. но мы ведь говорим про язык Дельфи?
меня удивляет пример на Дельфи, приведенный в защиту goto в [9]. особождение захваченных ресурсов стоит помещать под try finally - это азбука. goto здесь полумера.
сколько пишу, почему-то не приходит в голову воспользоваться оператором goto... мне кажется, что ситуация, когда использование goto - наиболее простой выход, это сигнал о том, что что-то не так с Вашим кодом. имеет смысл задуматься над тем, чтобы его переписать. это имхо.
← →
nikkie © (2004-04-21 16:33) [73]>Fay
>Вас не удивляет присутствие goto в таких языках?
не удивляет. но мы ведь говорим про язык Дельфи?
меня удивляет пример на Дельфи, приведенный в защиту goto в [9]. особождение захваченных ресурсов стоит помещать под try finally - это азбука. goto здесь полумера.
сколько пишу, почему-то не приходит в голову воспользоваться оператором goto... мне кажется, что ситуация, когда использование goto - наиболее простой выход, это сигнал о том, что что-то не так с Вашим кодом. имеет смысл задуматься над тем, чтобы его переписать. это имхо.
← →
WebErr © (2004-04-21 16:35) [74]
> не удивляет. но мы ведь говорим про язык Дельфи?
Делфи - это язык?
← →
WebErr © (2004-04-21 16:35) [74]
> не удивляет. но мы ведь говорим про язык Дельфи?
Делфи - это язык?
← →
nikkie © (2004-04-21 16:52) [75]>Делфи - это язык?
да.
← →
nikkie © (2004-04-21 16:52) [75]>Делфи - это язык?
да.
← →
Андрей Сенченко © (2004-04-21 17:04) [76]nikkie © (21.04.04 16:52) [75]
1. Речь не о стиле, а о концептуальной идентичности некоторых "продвинутых" методов обхода GOTO в языках высшего уровня собственно самому бытовому GOTO в языках, не имеющих этих методов.
Если описать это другими словами - то, что для моей жены "Тёмно-персиковый цвет", то для моего приятеля-дизайнера C0 M18 Y83 K0 - описать можно по-разному, суть одна.
В случае использования ( или неиспользования по религиозным причинам ) оператора GOTO Вы все-равно рано или поздно так или иначе прибегаете к безусловному переходу куда-либо. В случае , приведенном Verg © это осуществлено выходом по EXIT в секцию finally. Что при этом происходит на системном уровне ( спасибо - объяснили ) - не суть важно, если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO, а не по соображениям алгоритмического характера
Дельфи - это среда программирования безусловно.
← →
Андрей Сенченко © (2004-04-21 17:04) [76]nikkie © (21.04.04 16:52) [75]
1. Речь не о стиле, а о концептуальной идентичности некоторых "продвинутых" методов обхода GOTO в языках высшего уровня собственно самому бытовому GOTO в языках, не имеющих этих методов.
Если описать это другими словами - то, что для моей жены "Тёмно-персиковый цвет", то для моего приятеля-дизайнера C0 M18 Y83 K0 - описать можно по-разному, суть одна.
В случае использования ( или неиспользования по религиозным причинам ) оператора GOTO Вы все-равно рано или поздно так или иначе прибегаете к безусловному переходу куда-либо. В случае , приведенном Verg © это осуществлено выходом по EXIT в секцию finally. Что при этом происходит на системном уровне ( спасибо - объяснили ) - не суть важно, если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO, а не по соображениям алгоритмического характера
Дельфи - это среда программирования безусловно.
← →
Fay © (2004-04-21 17:07) [77]2Андрей Сенченко © (21.04.04 17:04) [76]
Бум щетать , что енто реземю.
8)
← →
Fay © (2004-04-21 17:07) [77]2Андрей Сенченко © (21.04.04 17:04) [76]
Бум щетать , что енто реземю.
8)
← →
Андрей Сенченко © (2004-04-21 17:13) [78]Fay © (21.04.04 17:07) [77]
угу
← →
Андрей Сенченко © (2004-04-21 17:13) [78]Fay © (21.04.04 17:07) [77]
угу
← →
nikkie © (2004-04-21 17:20) [79]>...методов обхода GOTO...
а не надо обходить goto. надо писать так, чтобы он был не нужен. если возникает желание написать goto, стоит задуматься, а то ли я пишу. это мое имхо.
>если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO...
не надо фантазировать, как кто собирается использовать эту конструкцию. пример Verg-a был ответом на [9]. где, кстати, goto использовался вовсе не с целью выхода из цикла (в том примере goto не является аналогом "Exit в смысле Ада").
>Дельфи - это среда программирования безусловно.
это безусловно да. но слово безусловно нельзя заменить на слово исключительно.
← →
nikkie © (2004-04-21 17:20) [79]>...методов обхода GOTO...
а не надо обходить goto. надо писать так, чтобы он был не нужен. если возникает желание написать goto, стоит задуматься, а то ли я пишу. это мое имхо.
>если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO...
не надо фантазировать, как кто собирается использовать эту конструкцию. пример Verg-a был ответом на [9]. где, кстати, goto использовался вовсе не с целью выхода из цикла (в том примере goto не является аналогом "Exit в смысле Ада").
>Дельфи - это среда программирования безусловно.
это безусловно да. но слово безусловно нельзя заменить на слово исключительно.
← →
Fay © (2004-04-21 17:23) [80]2nikkie © (21.04.04 17:20) [79]
Если у тебя возникает желание любой ценой не использовать goto, стоит задуматься, не фигнёй ли ты занимаешься. IMHO.
>> безусловно нельзя заменить на слово исключительно
Гениально!!!
← →
Fay © (2004-04-21 17:23) [80]2nikkie © (21.04.04 17:20) [79]
Если у тебя возникает желание любой ценой не использовать goto, стоит задуматься, не фигнёй ли ты занимаешься. IMHO.
>> безусловно нельзя заменить на слово исключительно
Гениально!!!
Страницы: 1 2 3 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.83 MB
Время: 0.045 c