Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GoTo [D7, XP]


Страницы:   1 2 3 4 5

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


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо