![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GoTo [D7, XP]
WestBronx © (2006-02-18 11:35:00)Привет. Подскажите, есть ли в делфи нечто подобное:
if i := 1 then goto endp;
...
endp:
Извените за прямо сказать тупой вопрос, просто по F1, искал, нашёл кое что но непонял как этим пользоваться, объясните пожалуйсто. спасибо.
Такк (2006-02-20 02:30:00) [41]> TUser © (19.02.06 13:08) [49]
> var i: integer;
> i:=0; f:=true;
Хорошая идея, чтобы стало короче напихать всё в одну строчку.
Anatoly Podgoretsky (2006-02-19 13:08:00) [42]Код Дельфи подойдет как эталон?
TUser (2006-02-19 13:08:00) [43]
> var
> i, eInd : Integer;
> label End1;
> begin
> eInd := Length(Enemy1);
> for i := 0 to eInd -1 do
> if Enemy1[i] = nil then begin
> eInd := i;
> goto End1;
> end;
> SetLength(Enemy1, eInd +1);
> End1:
> ...
>
>
> Сделайте короче и понятнее без goto.
var i: integer;
f: boolean;
begin
i:=0; f:=true;
while f and (i < length(Arr)) do
if Arr[i] = nil then
f:=false
else inc (i);
if f then
SetLength(Arr,i+1);
end;
Не буду настаивать, что короче, но ИМХО, понятнее. Лично мне. Всегда в подобных случаях использую примерно такую конструкцию. Дополнительное преимущество перед вашим кодом - в переменной i гарантированного оказывается номер нового или найденного элемента, не надо вводить дополнительной переменной. Экономим аж прям целых 3 байта памяти! А если разрешить себе любимому использовать break, - то все 4.
Sergey Masloff (2006-02-19 13:06:00) [44]Гаврила © (18.02.06 13:18) [2]
>Использование Goto категорически не рекомендуется, так как >концептуально неверно.
К месту и вовремя примененный goto вполне допустим. Другое дело что чтобы его применять нужно очень четкое осознание почему именно его а не альтернативные варианты. Как правило, такое понимание недоступно при низком и среднем уровне владения языком, поэтому и не рекомендуется.
А так вполне допустимо.
P.S. вобщем-то, мне за мою многолетнюю практику удалось обойтись без goto но пару раз я видел его в чужом коде и вполне к месту.
McSimm (2006-02-19 11:43:00) [45]Вот именно об этом я сказал выше
Понять, осознать это можно только получив достаточный опыт. Но на этом этапе новичок обычно стоит на позиции "зачем мне извращаться и усложнять структуру если вполне работающий и отнюдь нисколько не запутанный код получается если вставить здесь goto"
Привыкнув использовать безусловный переход вы рано или поздно наченете мспользовать его и там где он явно лишний. Просто потому, что вам будет некогда задуматься над другим вариантом - сроки поджимают. Потом при модификации кода вы будете вынуждены добавить еще пару меток (ну не переписывать же код заново).
Готово - спагетти поданы.
Defunct (2006-02-19 06:58:00) [46]Джо © (19.02.06 06:34) [45]
да.. теперь все понятно насчет вчерашнего..
весело тут у вас ;>
Шутнык (19.02.06 05:54) [39]
>Fay © (19.02.06 05:47) [37]
> > На самом деле, нужно просто не создавать дырки 8)
> Иными словами сдвигать всех Энеми если первый Энеми убит.
> А зачем сдвигать, если можно добавлять новых в дырки ?
Подсказка - можно не сдвигать. Убит ведь известно какой enemy, и известно какой - последний.
Джо (2006-02-19 06:34:00) [47]> Defunct ©
Здается мне, что после такой лужи гражданин ГоуТу опять прибегнет к излюбленному приему — смене ника.
Defunct (2006-02-19 06:18:00) [48]> Особенно с учетом того, что "список" и TList это не одно и тоже, кстати говоря.
В оригинале было сказано не "список", а "динамический список"..
это не просто не одно и тоже с TList, это вообще разные вещи!
Defunct (2006-02-19 06:12:00) [49]Шутнык (19.02.06 05:58) [41]
LOL 2 раза, да Вы как я посмотрю весельчак!
Джо (2006-02-19 06:06:00) [50]> [41] Шутнык (19.02.06 05:58)
> Какая чушь. Если ты думаешь, что в TList по массиву никогда
> не "пробегаются", то ты вообще в программировании ничего
> не понимаешь. Хоть бы исходники его посмотрел, прежде чем
> такое нести.
А зачем по нему "пробегатья"?! В нем заведомо хранятся свободные ячейки. Так что достаточно List[0] в любой момент и List.Delete[0]. Так что, пардон, перестань чушь нести.
Особенно с учетом того, что "список" и TList это не одно и тоже, кстати говоря.
Шутнык (2006-02-19 05:58:00) [51]Удалено модератором
Примечание: п. 5
Джо (2006-02-19 05:55:00) [52]Удалено модератором
Шутнык (2006-02-19 05:54:00) [53]Удалено модератором
Примечание: п. 5
Defunct (2006-02-19 05:49:00) [54]Fay © (19.02.06 05:47) [37]
это уже вариант 2.
в запасе есть еще пару вариантов ;>
Fay (2006-02-19 05:47:00) [55]На самом деле, нужно просто не создавать дырки 8)
Defunct (2006-02-19 05:45:00) [56]Fay © (19.02.06 05:42) [34]
Дык -
вариант 1: добавить динамический список, куда помещать записи с номерами освободившихся ячеек массива. Тогда и по массиву "пробегаться" не придется и goto не нужен.
Шутнык (2006-02-19 05:44:00) [57]Удалено модератором
Примечание: п. 5
Fay (2006-02-19 05:42:00) [58]2 Defunct © (19.02.06 5:40) [33]
Вы м.б. ещё не догадались, но мы ждём от Вас то самое шустрое и изящное решение [21].
Defunct (2006-02-19 05:40:00) [59]Шутнык (19.02.06 05:37) [32]
LOL
извините не сдержался.
В общем, что тут сказать "юзаете" goto - "юзайте" дальше.
Шутнык (2006-02-19 05:37:00) [60]Удалено модератором
Примечание: п. 5