![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GoTo [D7, XP]
WestBronx © (2006-02-18 11:35:00)Привет. Подскажите, есть ли в делфи нечто подобное:
if i := 1 then goto endp;
...
endp:
Извените за прямо сказать тупой вопрос, просто по F1, искал, нашёл кое что но непонял как этим пользоваться, объясните пожалуйсто. спасибо.
Fay (2006-02-19 00:24:00) [81]2 Гаврила © (18.02.06 13:18) [2]
> Использование Goto категорически не рекомендуется, так как концептуально неверно.
Бред.
McSimm (2006-02-18 23:29:00) [82]>Галинка © (18.02.06 22:31) [9]
что вы называете безусловным циклом?
Галинка (2006-02-18 22:31:00) [83]Если эта переменная передается, то лучше ИМХО
wheil i<>0 do
begin
{ тело цикла }
end
вообще безусловный цикл надо как можно реже использовать, в операциях когда надо пробежать все без исключения. Условные циклы в этом смысле конечно удобнее и гибче.
Чародей (2006-02-18 21:35:00) [84]
> Мне нужно было в начале обработке процедуры, вставить проверку,
> если переменная i = 0, тогда пропускаем вычеслительные
> действия, и сразу к концу процедуры. Лучшей альтернативы,
> ежели GoTo, я не вижу.
procedure
begin
if i<>0 then
begin
...
end;
end;
Разве не вериант?
WestBronx (2006-02-18 21:02:00) [85]Галинка © (18.02.06 15:26) [6]
Мне нужно было в начале обработке процедуры, вставить проверку, если переменная i = 0, тогда пропускаем вычеслительные действия, и сразу к концу процедуры. Лучшей альтернативы, ежели GoTo, я не вижу.
P.S. Создать 2 процедуры, не выход %)
McSimm © (18.02.06 14:47) [5]
Спасибо, позновательно ;)
DrPass © (18.02.06 14:44) [4]
Единственный учебник который у меня есть по делфи, это справочник команд %) (нормального описания GoTo, там к сожалению не оказалось) Остальное как правило либо в интернете, либо в F1.
Галинка (2006-02-18 15:26:00) [86]А зачем нужна такая конструкция? Я обычно обходила это с помощью условных циклов repeat ... until, где в конечное условие было включено и это тоже. Самый простой вариант завести какой-то флаг или счетчик и проверять его. Но без предметной области точно сказать нельзя.
McSimm (2006-02-18 14:47:00) [87]Мини-статья о пользе околорелигиозных мотивов :)
Сам по себеGoto безусловно не является каким-то корнем зла или причиной неправильной работы программы.
Виновата, на мой взгляд, его "безапеляционность", совершенно не приспособленное поведение под структурность кода, точнее под хорошую структурность кода.
Использование goto вполне может бытьбезвредным, (если не считать то, что показать такой код кому-то вы не сможете :)
Использование goto на начальных этапах программирования порой напрашивается как самый простой вариант построения той или иной конструкции, чтобы перестроить код на "правильную" структуру требуется дополнительная умственная работа. Если вам не помешать и не заставить это сделать, в ваш код почти наверняка начнут вплетаться goto как сорняки.
В результате вы получаете работающий правильно код, который напоминает тарелку со спагетти :) (сравнение не мое, но источник уже не вспомню)
Через некоторое время вы начнете получать уже якобы работающий код, с заложенными в него логическими дырами, а потом вам придется или плюнуть на усложнившуюся задачу или провести полный рефакторинг.
Понять, осознать это можно только получив достаточный опыт. Но на этом этапе новичок обычно стоит на позиции "зачем мне извращаться и усложнять структуру если вполне работающий и отнюдь нисколько не запутанный код получается если вставить здесь goto"
И вот тут помогающим фактором выступает "религиозный" канон. Вам со всех сторон говорят, что goto это плохо. Покажи вы свою процедуру, первым замечанием какое вы получите?
Почему "религиозным" ? Потому что обычно никто не в состоянии (я в том числе) достаточно толково объяснить суть претензий :)
К слову сказать, операторы break continue exit и т.п. по сути являются такими же прерывателями логики, удаляющими код от идеальной структурной организации. Более того, к вредителям можно отнести даже технику флагов.
Тем не менее использование вышеупомянутых "сорняков" не является настолько нежелательным, как goto. Объяснить это я могу тем, что эти конструкции являются частью основных логических кирпичиков и разрушают структурность намного в меньшей мере.
Хотя отсутствие догматических "запретов" на них является причиной появления такого жуткого винегрета, который не всякому goto доступен :)
DrPass (2006-02-18 14:44:00) [88]
> А по подробнее где прочитать можно? Или расскажете что там
> критичного?
Любой приличный учебник по программированию за последние 15 лет. Критичного - ничего. Кроме одного: если разбираться в коде сложной программы, где используются goto, можно свихнуть мозги. А это уже решающий фактор чтобы от него отказаться. Тем более что нет такой ситуации, где бы нельзя было без него обойтись
WestBronx (2006-02-18 14:17:00) [89]Спасибо огромное. Разобрался =)
"Использование Goto категорически не рекомендуется, так как концептуально неверно."
А по подробнее где прочитать можно? Или расскажете что там критичного?
Гаврила (2006-02-18 13:18:00) [90]Использование Goto категорически не рекомендуется, так как концептуально неверно.
Если все таки приперло попользовать, синтаксически эта возможность есть (она осталась еще со времен старого доброго паскаля)
procedure TForm1.Button1Click(Sender: TObject);
label m1, m2;
begin
if Sender is TButton
then goto m1
else goto m2;
m1:
begin
ShowMessage('m1');
Exit;
end;
m2: ShowMessage('m2');
end;
ЮЮ (2006-02-18 11:51:00) [91]если endp: - метка выхода из процедуры, то
try
...
if i = 1 then Exit;
...
finally
// этот код выполнится всегда, даже по Exit из любого места процедуры
end;