![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GoTo [D7, XP]
WestBronx © (2006-02-18 11:35:00)Привет. Подскажите, есть ли в делфи нечто подобное:
if i := 1 then goto endp;
...
endp:
Извените за прямо сказать тупой вопрос, просто по F1, искал, нашёл кое что но непонял как этим пользоваться, объясните пожалуйсто. спасибо.
Defunct (2006-02-19 05:27:00) [61]Шутнык (19.02.06 05:16) [30]
Дите 3 лет..
вместо вполне логичного и ожидаемого мной от вас вопроса "как это сделать?", начались какие-то "обидки-кровавки", домыслы и т.п.
Смысл-то защищать один из многих возможных, но далеко не лучший алгоритм?
Шутнык (2006-02-19 05:16:00) [62]Удалено модератором
Примечание: п. 5
Fay (2006-02-19 05:16:00) [63]2 Defunct © (19.02.06 4:31) [22]
> не зная особенностей T-SQL можно вообще впасть в панику
Думаю, правильнее было бы сказать "совсем/почти не зная T-SQL". На таком уровне рано ещё читать чужие исходники - нужно буквари/BOL изучать.
Defunct (2006-02-19 05:10:00) [64]> Ты не можешь ЗНАЧИТЕЛЬНО ускорить программу даже если этот код будет выполняться мгновенно.
Да.. наверное в вашей программе еще много подобных мест, поэтому признаю что погорячился. Значительно ускорится только алгоритм отвечающий за "появление" и "исчезновение" enemies.
И вопрос был не как от этого кода избавитсья, а как сделать ЭТОТ код короче или понятнее
Да мне все-равно о чем был вопрос. Зато я точно знаю, что именно этот код можно за команию с goto убрать и вместо него написать более быстрый аналог без ущерба в быстродейтвии и наглядности.
Шутнык (2006-02-19 04:56:00) [65]Удалено модератором
Примечание: п. 5
Defunct (2006-02-19 04:47:00) [66]Рационализатор (19.02.06 04:39) [24]
Правильно! ибо нефиг! ;>
Шутнык (19.02.06 04:43) [25]
насчет [23] - это не шутка.
Шутнык (2006-02-19 04:43:00) [67]Удалено модератором
Примечание: п. 5
Рационализатор (2006-02-19 04:39:00) [68]Удалено модератором
Примечание: п. 5
Defunct (2006-02-19 04:35:00) [69]> Сделайте короче и понятнее без goto.
конкретно этот код сделать короче и понятнее может и нельзя, но значительно ускорить программу избавившись сразу и от goto, и от перебора массива в поисках свободного места - запросто.
Defunct (2006-02-19 04:31:00) [70]Fay © (19.02.06 03:45) [19]
> подобный код весьма прозрачен.
кому как, вам - как автору кода - да.
мне - нет, без коментариев и трассировки наврятли бы разобрался с какой целью был прыжек в тело цикла, минуя предусловие... А не зная особенностей T-SQL можно вообще впасть в панику, будет ли исполняться цикл или после "fetch next" или перейдет сразу к "close c".
GoTo (2006-02-19 04:23:00) [71]Удалено модератором
Примечание: п. 5
Fay (2006-02-19 03:48:00) [72]8) чё-то я переволновался 8)
:some_labelследует читать какsome_label:
Fay (2006-02-19 03:45:00) [73]2 Defunct © (19.02.06 3:30) [17]
>10. У попа была собака, он ее любил
>20. она съела кусок мяса, он ее убил
> 30. goto 10.
Не только. Я использую для того, не писать совершенно одинаковые строки. Пример (T-SQL):
declare cursor ....
open cursor ...
goto some_label
while @@fetch_status = 0 begin
....
:some_label
fetch next ...
end
close c
В Delphi такие ситуации возникают реже, но возникают. Так почему бы не использовать goto? IMHO, подобный код весьма прозрачен.
Галинка (2006-02-19 03:43:00) [74]А я думала
gotoумер вместе с Бэйсиком. Вот не поверите, я им точно в Паскале (лет этак 8 уже), никогда не применяла. Если честно, я даже не знала, что он в Паскале есть ... Спасибо что просветии. Нам как-то сказали, что применение этого оператора свидетельствует о "плохом стиле программирования". Да и если все можно процедурками, функциями и различными циклами оформить, то зачем он вообще?
В Бэйсике он был необходим по большей части для замены тех самых условных циклов. Т.е. если в Бэйсике была комбинацияif... then goto..., то в Паскале я думаю можно обойти это с помощью условных циклов, ну искусственно завести счетчик или флажок (не так уж они и много весят), чтобы по этому условиюuntilтоже выкидывал. Неужели это намного труднее чемgoto end?
Defunct (2006-02-19 03:30:00) [75]Fay © (19.02.06 02:54) [15]
Goto - это бесспорно хорошо для вот таких программ:
10. У попа была собака, он ее любил
20. она съела кусок мяса, он ее убил
30. goto 10.
и для вот таких:
maincycle:
call proc1
call proc2
call proc3
jmp maincycle
но его наличие обременяет как только goto начинает использоваться вот в таких программах:
start:
if a > 100 then goto checkcondition3
b := a / 2;
...
if cond1 then goto checkcondition3
...
checkcondition2:
if cond2 then goto exit
a := b;
...
goto ainc1
...
checkcondition3:
if cond3 then goto checkcondition2
...
ainc1: a := a+1;
goto start
...
exit:
>> "если разбираться в коде сложной программы, где используются goto, можно свихнуть мозги"
> Можно подумать, без goto в сложной программе разбаться легко!
не легко, но с goto свихнуть мозги гораздо быстрее!
думаю вы поняли о чем я.
Германн (2006-02-19 03:09:00) [76]2 McSimm © (18.02.06 14:47) [5]
Извини, не согласен со многими положениями миги-статьи!
> К слову сказать, операторы break continue exit и т.п. по
> сути являются такими же прерывателями логики, удаляющими
> код от идеальной структурной организации.
Fay (2006-02-19 02:54:00) [77]2 McSimm © (19.02.06 1:08) [14]
Я решительно не вижу никаких аргументов против goto. Да и как поспоришь, когда тут все такие умные... "Хорошая структурность кода"... "прерыватели логики"... Ужоз!
"если разбираться в коде сложной программы, где используются goto, можно свихнуть мозги"
Можно подумать, без goto в сложной программе разбаться легко!
Короче, не надо путать вибратор в телефоне с телефоном в вибраторе. Всему своё время и место.
McSimm (2006-02-19 01:08:00) [78]>Fay ©
> Бред
Очень информативно, но недостаточно аргументировано :))
Возможно вы считаете использование goto оправданным, но не стоит наверное так с плеча рубить :)
McSimm (2006-02-19 01:06:00) [79]>Галинка © (19.02.06 00:49) [12]
Я не придираюсь :), просто не совсем понял почему вы предложили использовать цикл и подумал что вы что-то напутали.
А почему forнадо реже использовать ? Это некорректное утверждение.
Если количество итераций предопределено то именно его и надо использовать, в других случаях -- repeat/while
Галинка (2006-02-19 00:49:00) [80]McSimm © (18.02.06 23:29) [10]
for ... to ... do ...
И это не я называю. Это я вычитала не то в Файсмане еще, не то в книжке Диалог МИФИ (авторов не помню)... Только не говорите, чтобы цитату привела. Нету у меня их сейчас уже...
Да и вот сейчас подумала, если все должно выполняться если i<>0, то так и надо написать. Вот как Чародей © (18.02.06 21:35) [8] рекомендует.