Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

GoTo   Найти похожие ветки 

 
WestBronx   (2006-02-18 11:35) [0]

Привет. Подскажите, есть ли в делфи нечто подобное:

if i := 1 then  goto endp;
...
endp:


Извените за прямо сказать тупой вопрос, просто по F1, искал, нашёл кое что но непонял как этим пользоваться, объясните пожалуйсто. спасибо.


 
ЮЮ ©   (2006-02-18 11:51) [1]

если endp: - метка выхода из процедуры, то

try
 ...
      if i = 1 then Exit;
 ...
finally
  // этот код выполнится всегда, даже по Exit из любого места процедуры
end;


 
Гаврила ©   (2006-02-18 13:18) [2]

Использование 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;


 
WestBronx   (2006-02-18 14:17) [3]

Спасибо огромное. Разобрался =)

"Использование Goto категорически не рекомендуется, так как концептуально неверно."
А по подробнее где прочитать можно? Или расскажете что там критичного?


 
DrPass ©   (2006-02-18 14:44) [4]


> А по подробнее где прочитать можно? Или расскажете что там
> критичного?

Любой приличный учебник по программированию за последние 15 лет. Критичного - ничего. Кроме одного: если разбираться в коде сложной программы, где используются goto, можно свихнуть мозги. А это уже решающий фактор чтобы от него отказаться. Тем более что нет такой ситуации, где бы нельзя было без него обойтись


 
McSimm ©   (2006-02-18 14:47) [5]

Мини-статья о пользе околорелигиозных мотивов :)

Сам по себе Goto безусловно не является каким-то корнем зла или причиной неправильной работы программы.
Виновата, на мой взгляд, его "безапеляционность", совершенно не приспособленное поведение под структурность кода, точнее под хорошую структурность кода.

Использование goto вполне может быть безвредным, (если не считать то, что показать такой код кому-то вы не сможете :)

Использование goto на начальных этапах программирования порой напрашивается как самый простой вариант построения той или иной конструкции, чтобы перестроить код на "правильную" структуру требуется дополнительная умственная работа. Если вам не помешать и не заставить это сделать, в ваш код почти наверняка начнут вплетаться goto как сорняки.
В результате вы получаете работающий правильно код, который напоминает тарелку со спагетти :) (сравнение не мое, но источник уже не вспомню)

Через некоторое время вы начнете получать уже якобы работающий код, с заложенными в него логическими дырами, а потом вам придется или плюнуть на усложнившуюся задачу или провести полный рефакторинг.

Понять, осознать это можно только получив достаточный опыт. Но на этом этапе новичок обычно стоит на позиции "зачем мне извращаться и усложнять структуру если вполне работающий и отнюдь нисколько не запутанный код получается если вставить здесь goto"

И вот тут помогающим фактором выступает "религиозный" канон. Вам со всех сторон говорят, что goto это плохо. Покажи вы свою процедуру, первым замечанием какое вы получите?
Почему "религиозным" ? Потому что обычно никто не в состоянии (я в том числе) достаточно толково объяснить суть претензий :)

К слову сказать, операторы break continue exit и т.п. по сути являются такими же прерывателями логики, удаляющими код от идеальной структурной организации. Более того, к вредителям можно отнести даже технику флагов.
Тем не менее использование вышеупомянутых "сорняков" не является настолько нежелательным, как goto. Объяснить это я могу тем, что эти конструкции являются частью основных логических кирпичиков и разрушают структурность намного в меньшей мере.
Хотя отсутствие догматических "запретов" на них является причиной появления такого жуткого винегрета, который не всякому goto доступен :)


 
Галинка ©   (2006-02-18 15:26) [6]

А зачем нужна такая конструкция? Я обычно обходила это с помощью условных циклов repeat ... until, где в конечное условие было включено и это тоже. Самый простой вариант завести какой-то флаг или счетчик и проверять его. Но без предметной области точно сказать нельзя.


 
WestBronx   (2006-02-18 21:02) [7]

Галинка ©   (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 21:35) [8]


> Мне нужно было в начале обработке процедуры, вставить проверку,
>  если переменная i = 0, тогда пропускаем вычеслительные
> действия, и сразу к концу процедуры. Лучшей альтернативы,
>  ежели GoTo, я не вижу.


procedure
begin
if i<>0 then
begin
...
end;
end;

Разве не вериант?


 
Галинка ©   (2006-02-18 22:31) [9]

Если эта переменная передается, то лучше ИМХО
wheil i<>0 do
begin
{  тело цикла  }
end


вообще безусловный цикл надо как можно реже использовать, в операциях когда надо пробежать все без исключения. Условные циклы в этом смысле конечно удобнее и гибче.


 
McSimm ©   (2006-02-18 23:29) [10]

>Галинка ©   (18.02.06 22:31) [9]
что вы называете безусловным циклом?


 
Fay ©   (2006-02-19 00:24) [11]

2 Гаврила ©   (18.02.06 13:18) [2]
> Использование Goto категорически не рекомендуется, так как концептуально неверно.

Бред.


 
Галинка ©   (2006-02-19 00:49) [12]

McSimm ©   (18.02.06 23:29) [10]

for ... to ... do ...

И это не я называю. Это я вычитала не то в Файсмане еще, не то в книжке Диалог МИФИ (авторов не помню)... Только не говорите, чтобы цитату привела. Нету у меня их сейчас уже...

Да и вот сейчас подумала, если все должно выполняться если i<>0, то так и надо написать. Вот как Чародей ©   (18.02.06 21:35) [8] рекомендует.


 
McSimm ©   (2006-02-19 01:06) [13]

>Галинка ©   (19.02.06 00:49) [12]
Я не придираюсь :), просто не совсем понял почему вы предложили использовать цикл и подумал что вы что-то напутали.
А почему for надо реже использовать ? Это некорректное утверждение.
Если количество итераций предопределено то именно его и надо использовать, в других случаях -- repeat/while


 
McSimm ©   (2006-02-19 01:08) [14]

>Fay ©
> Бред

Очень информативно, но недостаточно аргументировано :))
Возможно вы считаете использование goto оправданным, но не стоит наверное так с плеча рубить :)


 
Fay ©   (2006-02-19 02:54) [15]

2 McSimm ©   (19.02.06 1:08) [14]
Я решительно не вижу никаких аргументов против goto. Да и как поспоришь, когда тут все такие умные... "Хорошая структурность кода"... "прерыватели логики"... Ужоз!

"если разбираться в коде сложной программы, где используются goto, можно свихнуть мозги"
Можно подумать, без goto в сложной программе разбаться легко!

Короче, не надо путать вибратор в телефоне с телефоном в вибраторе. Всему своё время и место.


 
Германн ©   (2006-02-19 03:09) [16]

2 McSimm ©   (18.02.06 14:47) [5]
Извини, не согласен со многими положениями миги-статьи!


> К слову сказать, операторы break continue exit и т.п. по
> сути являются такими же прерывателями логики, удаляющими
> код от идеальной структурной организации.


 
Defunct ©   (2006-02-19 03:30) [17]

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:43) [18]

А я думала goto умер вместе с Бэйсиком. Вот не поверите, я им точно в Паскале (лет этак 8 уже), никогда не применяла. Если честно, я даже не знала, что он в Паскале есть ... Спасибо что просветии. Нам как-то сказали, что применение этого оператора свидетельствует о "плохом стиле программирования". Да и если все можно процедурками, функциями и различными циклами оформить, то зачем он вообще?

В Бэйсике он был необходим по большей части для замены тех самых условных циклов. Т.е. если в Бэйсике была комбинация if... then goto..., то в Паскале я думаю можно обойти это с помощью условных циклов, ну искусственно завести счетчик или флажок (не так уж они и много весят), чтобы по этому условию until тоже выкидывал. Неужели это намного труднее чем goto end?


 
Fay ©   (2006-02-19 03:45) [19]

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, подобный код весьма прозрачен.


 
Fay ©   (2006-02-19 03:48) [20]

8) чё-то я переволновался 8)
:some_label следует читать как some_label:


 
GoTo   (2006-02-19 04:23) [21]

Удалено модератором
Примечание: п. 5


 
Defunct ©   (2006-02-19 04:31) [22]

Fay ©   (19.02.06 03:45) [19]
> подобный код весьма прозрачен.

кому как, вам - как автору кода - да.
мне - нет, без коментариев и трассировки наврятли бы разобрался с какой целью был прыжек в тело цикла, минуя предусловие... А не зная особенностей T-SQL можно вообще впасть в панику, будет ли исполняться цикл или после "fetch next" или перейдет сразу к "close c".


 
Defunct ©   (2006-02-19 04:35) [23]

> Сделайте короче и понятнее без goto.

конкретно этот код сделать короче и понятнее может и нельзя, но значительно ускорить программу избавившись сразу и от goto, и от перебора массива в поисках свободного места - запросто.


 
Рационализатор   (2006-02-19 04:39) [24]

Удалено модератором
Примечание: п. 5


 
Шутнык   (2006-02-19 04:43) [25]

Удалено модератором
Примечание: п. 5


 
Defunct ©   (2006-02-19 04:47) [26]

Рационализатор   (19.02.06 04:39) [24]

Правильно! ибо нефиг! ;>

Шутнык   (19.02.06 04:43) [25]
насчет [23] - это не шутка.


 
Шутнык   (2006-02-19 04:56) [27]

Удалено модератором
Примечание: п. 5


 
Defunct ©   (2006-02-19 05:10) [28]

> Ты не можешь ЗНАЧИТЕЛЬНО ускорить программу даже если этот код будет выполняться мгновенно.

Да.. наверное в вашей программе еще много подобных мест, поэтому признаю что погорячился. Значительно ускорится только алгоритм отвечающий за "появление" и "исчезновение" enemies.

И вопрос был не как от этого кода избавитсья, а как сделать ЭТОТ код короче или понятнее
Да мне все-равно о чем был вопрос. Зато я точно знаю, что именно этот код можно за команию с goto убрать и вместо него написать более быстрый аналог без ущерба в быстродейтвии и наглядности.


 
Fay ©   (2006-02-19 05:16) [29]

2 Defunct ©   (19.02.06 4:31) [22]
> не зная особенностей T-SQL можно вообще впасть в панику
Думаю, правильнее было бы сказать "совсем/почти не зная T-SQL". На таком уровне рано ещё читать чужие исходники - нужно буквари/BOL изучать.


 
Шутнык   (2006-02-19 05:16) [30]

Удалено модератором
Примечание: п. 5


 
Defunct ©   (2006-02-19 05:27) [31]

Шутнык   (19.02.06 05:16) [30]

Дите 3 лет..
вместо вполне логичного и ожидаемого мной от вас вопроса "как это сделать?", начались какие-то "обидки-кровавки", домыслы и т.п.
Смысл-то защищать один из многих возможных, но далеко не лучший алгоритм?


 
Шутнык   (2006-02-19 05:37) [32]

Удалено модератором
Примечание: п. 5


 
Defunct ©   (2006-02-19 05:40) [33]

Шутнык   (19.02.06 05:37) [32]

LOL
извините не сдержался.
В общем, что тут сказать "юзаете" goto - "юзайте" дальше.


 
Fay ©   (2006-02-19 05:42) [34]

2 Defunct ©   (19.02.06 5:40) [33]
Вы м.б. ещё не догадались, но мы ждём от Вас то самое шустрое и изящное решение [21].


 
Шутнык   (2006-02-19 05:44) [35]

Удалено модератором
Примечание: п. 5


 
Defunct ©   (2006-02-19 05:45) [36]

Fay ©   (19.02.06 05:42) [34]

Дык -
вариант 1:  добавить динамический список, куда помещать записи с номерами освободившихся ячеек массива. Тогда и по массиву "пробегаться" не придется и goto не нужен.


 
Fay ©   (2006-02-19 05:47) [37]

На самом деле, нужно просто не создавать дырки 8)


 
Defunct ©   (2006-02-19 05:49) [38]

Fay ©   (19.02.06 05:47) [37]

это уже вариант 2.
в запасе есть еще пару вариантов ;>


 
Шутнык   (2006-02-19 05:54) [39]

Удалено модератором
Примечание: п. 5


 
Джо ©   (2006-02-19 05:55) [40]

Удалено модератором


 
Шутнык   (2006-02-19 05:58) [41]

Удалено модератором
Примечание: п. 5


 
Джо ©   (2006-02-19 06:06) [42]

> [41] Шутнык   (19.02.06 05:58)
> Какая чушь. Если ты думаешь, что в TList по массиву никогда
> не "пробегаются", то ты вообще в программировании ничего
> не понимаешь. Хоть бы исходники его посмотрел, прежде чем
> такое нести.

А зачем по нему "пробегатья"?! В нем заведомо хранятся свободные ячейки. Так что достаточно List[0] в любой момент и List.Delete[0]. Так что, пардон, перестань чушь нести.
Особенно с учетом того, что "список" и TList это не одно и тоже, кстати говоря.


 
Defunct ©   (2006-02-19 06:12) [43]

Шутнык   (19.02.06 05:58) [41]

LOL 2 раза, да Вы как я посмотрю весельчак!


 
Defunct ©   (2006-02-19 06:18) [44]

> Особенно с учетом того, что "список" и TList это не одно и тоже, кстати говоря.

В оригинале было сказано не "список", а "динамический список"..
это не просто не одно и тоже с TList, это вообще разные вещи!


 
Джо ©   (2006-02-19 06:34) [45]

>  Defunct ©  

Здается мне, что после такой лужи гражданин ГоуТу опять прибегнет к излюбленному приему — смене ника.


 
Defunct ©   (2006-02-19 06:58) [46]

Джо ©   (19.02.06 06:34) [45]
да.. теперь все понятно насчет вчерашнего..
весело тут у вас ;>

Шутнык   (19.02.06 05:54) [39]
>Fay ©   (19.02.06 05:47) [37]
> > На самом деле, нужно просто не создавать дырки 8)

> Иными словами сдвигать всех Энеми если первый Энеми убит.
> А зачем сдвигать, если можно добавлять новых в дырки ?

Подсказка - можно не сдвигать. Убит ведь известно какой enemy, и известно какой - последний.


 
McSimm ©   (2006-02-19 11:43) [47]

Вот именно об этом я сказал выше

Понять, осознать это можно только получив достаточный опыт. Но на этом этапе новичок обычно стоит на позиции "зачем мне извращаться и усложнять структуру если вполне работающий и отнюдь нисколько не запутанный код получается если вставить здесь goto"


Привыкнув использовать безусловный переход вы рано или поздно наченете мспользовать его и там где он явно лишний. Просто потому, что вам будет некогда задуматься над другим вариантом - сроки поджимают. Потом при модификации кода вы будете вынуждены добавить еще пару меток (ну не переписывать же код заново).
Готово - спагетти поданы.


 
Sergey Masloff   (2006-02-19 13:06) [48]

Гаврила ©   (18.02.06 13:18) [2]
>Использование Goto категорически не рекомендуется, так как >концептуально неверно.
К месту и вовремя примененный goto вполне допустим. Другое дело что чтобы его применять нужно очень четкое осознание почему именно его а не альтернативные варианты. Как правило, такое понимание недоступно при низком и среднем уровне владения языком, поэтому и не рекомендуется.
 А так вполне допустимо.
 P.S. вобщем-то, мне за мою многолетнюю практику удалось обойтись без goto но пару раз я видел его в чужом коде и вполне к месту.


 
TUser ©   (2006-02-19 13:08) [49]


> 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.


 
Anatoly Podgoretsky ©   (2006-02-19 13:08) [50]

Код Дельфи подойдет как эталон?


 
Такк   (2006-02-20 02:30) [51]

> TUser ©   (19.02.06 13:08) [49]
> var i: integer;
>  i:=0; f:=true;
Хорошая идея, чтобы стало короче напихать всё в одну строчку.


 
Defunct ©   (2006-02-20 02:37) [52]

Такк   (20.02.06 02:30) [51]

ну как? работает программа быстрее или до сих пор goto пользуемся?


 
Такк   (2006-02-20 02:38) [53]

> Дополнительное преимущество перед вашим кодом - в переменной i гарантированного оказывается номер нового.
Ну, кому ты врёшь? Он и в том коде там оказывается.

> не надо вводить дополнительной переменной.
Ну, что ты опять врёшь? Там две переменные и у тебя две переменные.

Ведь спор достойно, без вранья.

У тебя : while f and (i < length(Arr)) do
И откуда читающий код знает что такое f ? Ты предлагаешь ему просмотреть весь код, чтобы это понять.

А конструкция: if Enemy1[i] = nil then - ясна с первого взгляда.


 
Такк   (2006-02-20 02:41) [54]

Обе конструкции работают быстрее чем 0.001 секунды. Поэтому засечь время не получилось.


 
Германн ©   (2006-02-20 02:45) [55]

Не знаю разъясню ли я данную ситуацию или запутаю!
Но, имхо, основной (потенциальный) вред Goto состоит в том, что метку для сего перехода можно определить "где угодно" в пределах модуля, в котором она описаны. Без учёта "где он (переход) вызван" и "где находится сия метка"!.


 
Такк   (2006-02-20 02:52) [56]

> Германн ©   (20.02.06 02:45) [55]
Если ты делаешь большой проект, и не один, а в команде, то первое правило - это код должен быть понятным.

А различные оптимизации - вплоть до перевода на ассемблер - это вообще отдельная задача. И делать её нужно, только там где критично. Если, конечно, ты хочешь уложиться в сроки, а не писать программу десять лет.


 
Defunct ©   (2006-02-20 02:54) [57]

> Такк  

а так?

var
   i : Integer;
begin
     for i := Low( Enemy1) to High( Enemy1) do
        if Enemy1[i] = nil then
           break;
     if  i >= High( Enemy1) then
        SetLength(Enemy1, Length( Enemy1) + 1);
..


 
Defunct ©   (2006-02-20 02:58) [58]

Такк   (20.02.06 02:52) [56]
> А различные оптимизации - вплоть до перевода на ассемблер - это вообще отдельная задача.

Да но вначале должен быть выбран оптимальный алгоритм, а иначе и ассемблер не поможет.


 
Такк   (2006-02-20 03:08) [59]

> Defunct ©   (20.02.06 02:54) [57]

Дельфи вылетела. Сам ищи ошибку в своём глюкавом коде. Программист, блин.


 
Defunct ©   (2006-02-20 03:10) [60]

Такк   (20.02.06 03:08) [59]

LOL
что бы я без вас делал? наверное, умер бы со скуки.


 
Такк   (2006-02-24 06:44) [61]

Так и не нашёл свою ошибку за столько времени?
i у тебя не определено при нулевом числе Энеми.


 
Grief ©   (2006-02-24 15:25) [62]

Блин ну и споры тут.... Тогда можно знаете, считать циклы с постусловиями тоже потенциально опасной структурой, так как чел, читающий код может к моменту, когда дочитает до условия забыть, что происходило выше... Да и вообще многие конструкции можно считать таковыми (опасными). Мое мнение - каждый должен сам решать, использовать их или нет. Лично я не использую не goto, не repeat..until"ы :)


 
Психиатор   (2006-02-25 06:48) [63]

Удалено модератором


 
Галинка ©   (2006-02-25 21:34) [64]

Grief ©   (24.02.06 15:25) [62]

А while Вы тоже не используете? Вы вообще задачи какого характера тогда пишите?


 
Pit ©   (2006-02-25 21:39) [65]

Зайдите на http://rsdn.ru/summary/3165.xml как раз для вас.


 
Галинка ©   (2006-02-26 00:02) [66]

Такк   (24.02.06 06:44) [61]

Может некорректно, но еще и по этому я не люблю циклы for ... to... do..., надо всегда помнить, что переменная цикла не определна до начала цикла и после его завершения. Т.е. нельзя проверить выполнялся ли цикл, и если да . то сколько раз, и в какой точке был быброс.


 
ASoft   (2006-02-26 03:27) [67]

Я помню был спор на счет EXIT... Помахав руками, пришли, все же, к мнению, что кому хочется (удобней) использовать его (exit), тот пусть его использует.
>[52] "...вы все еще пользуетесь GOTO? Тогда мы идем к Вам.." :) (оч. похоже:))
Лично мне не приходилось использовать в Delphi goto...Обходился как-то..
Но тут прозвучало мненение, что вообще "всё" не корректно: циклы, exit, break, goto..:)
Дык, давайте оставим только if..else..if, begin и end! Долой сорняки! :) Даешь флаги и счетчики! :)
сорри, если офтоп


 
Готец   (2006-02-26 04:10) [68]

> Может некорректно, но еще и по этому я не люблю циклы for ... to... do..., надо
> всегда помнить, что переменная цикла не определна до начала цикла и после
> его завершения. Т.е. нельзя проверить выполнялся ли цикл, и если да . то
> сколько раз, и в какой точке был быброс.

В конструкции с goto - это не нужно. Ты просто сам себе жизнь усложняешь отказываясь от него.

Как быть с выходом из нескольких вложенных циклов без goto - обсуждалось?


 
Defunct ©   (2006-02-26 05:16) [69]

> Как быть с выходом из нескольких вложенных циклов без goto - обсуждалось?

А зачем доводить реализацию программу до такой стадии, что нельзя обойтись без ГЛЮКОДРОМА. Выход из нескольких вложенных циклов есть ничто иное как потенциальный ГЛЮКОДРОМ, который будет здорово преукрашен конструкциями с использованием GOTO. GOTO и ГЛЮКОДРОМ - синонимы.


 
Готец   (2006-02-26 08:00) [70]

> выход из нескольких вложенных циклов есть ничто иное как потенциальный
> ГЛЮКОДРОМ,

перебор элементов четырёхмерного массива, с поиском нужного элемента - глюкодром? Ну ну.


 
begin...end ©   (2006-02-26 08:47) [71]

Гы...

Кому интересно -- скачайте старую ветку этого форума: http://slil.ru/22582632

Самое смешное в той истории -- то, что главный противник goto и Break впоследствии не раз приводил в своих ответах на форуме код, использующий Break...

Гы...

:о)))))


 
konrads   (2006-02-26 13:37) [72]

Сам goto не использую, но давным давно учили так, если совсем не в моготу, то только вниз по коду, и только наружу циклов и не в коем случае не внутрь новых и наверх.


 
Галинка ©   (2006-02-26 16:00) [73]

Готец   (26.02.06 08:00) [70]

А где применяются подобные монстры. Только без приколов назови предметную облать, в которой многомерный массив нельзя заменить одномерным, но с более сложными компонентами, например, записями. Не знаю как на счет объем, но информативность проги точно повысится, если будешь знать что к чему относится. Но это сто раз ИМХО


 
Defunct ©   (2006-02-26 18:47) [74]

begin...end ©   (26.02.06 08:47) [71]

Может он и goto где-то применял? про брек в той ветке прозвучали довольно убедительные аргументы, после чего будучи не полностью упертым бараном, почему бы не пользоваться тем, что иногда полезно.

Положил бы ту ветку в более доступное место, а то со скоростью 76 byte/s не реально скачивать.


 
Готец   (2006-02-27 04:29) [75]

Удалено модератором


 
Defunct ©   (2006-02-27 05:14) [76]

Готец   (27.02.06 04:29) [75]

Получается все 3D игры без Гото никак? Или только ваша? Дык, вы название скажите, чтобы если я вдруг на вашу игру наткнусь - случано не запустил.


 
Crash Coredump ©   (2006-02-27 15:45) [77]

Defunct ©   (26.02.06 05:16) [69]


> GOTO и ГЛЮКОДРОМ - синонимы.


Всякий овощ приносит пользу, будучи употреблен надлежащим образом в надлежащее время.

В том числе и оператор goto, в противном случае его бы исключили из допустимых конструкций языка. Раз не исключили, не забывай пожалуйста к подобным постам добавлять фразу: по моему скромному мнению.


 
Defunct ©   (2006-02-28 04:08) [78]


> Раз не исключили, не забывай пожалуйста к подобным постам
> добавлять фразу: по моему скромному мнению.


это не только мое мнение.
И уж позвольте мне самому решать где ставить, а где не ставить imho.

> Раз не исключили
Значит оставили для любителей глюкодрома (для совместимости со старыми версиями).


 
Заметка   (2006-02-28 05:07) [79]

Удалено модератором


 
Crash Coredump ©   (2006-02-28 13:27) [80]

Defunct ©   (28.02.06 04:08) [78]


> Значит оставили для любителей глюкодрома (для совместимости
> со старыми версиями).


В какой старой версии паскаля без оператора GOTO нельзя было обойтись ?


 
Crash Coredump ©   (2006-02-28 13:45) [81]

begin...end ©   (26.02.06 08:47) [71]

Ностальгия, однако. Благодарю :)


 
Defunct ©   (2006-03-01 00:44) [82]

Crash Coredump ©   (28.02.06 13:27) [80]
> В какой старой версии паскаля без оператора GOTO нельзя было обойтись ?

Вопрос несколько странен.

В оригинальном паскеле, предложенным Виртом, goto вообще нет, насколько я знаю.

Goto ввел Борланд в свой компилятор Borland Pascal, и с тех времен им приходится продолжать его поддерживать во всех новых компиляторах для совместимости.


 
Игорь Шевченко ©   (2006-03-01 00:54) [83]

Defunct ©   (01.03.06 00:44) [82]

"Когда под рукой нет ничего, кроме молотка, все вокруг кажется гвоздями".

Ты эта...не надо религиозных войн вести, фанатизм он в меру хорош. На худой конец воюй с Борландом, это их худые черти бермутят воду во пруду.

Или Дейскстру перечитай. А совсем хорошо будет, если ты ветку, приведенную begin..end перечитаешь.


 
Defunct ©   (2006-03-01 01:46) [84]

Игорь Шевченко ©   (01.03.06 00:54) [83]
> "Когда под рукой нет ничего, кроме молотка, все вокруг кажется гвоздями".
:)
Вов, супер фраза! пригодится, спасибо ;>

> Ты эта...не надо религиозных войн вести, фанатизм он в меру хорош. На худой конец воюй с Борландом, это их худые черти бермутят воду во пруду.
Дык, а где религиозные войны? Просто развлечение. Мне абсолютно до "пальмы" кто, что использует.

Или Дейскстру перечитай. А совсем хорошо будет, если ты ветку, приведенную begin..end перечитаешь.
Я в ней участвовал, и на память пока не жалуюсь.


 
Amoeba ©   (2006-03-01 12:44) [85]


> Defunct ©   (01.03.06 00:44) [82]
> Crash Coredump ©   (28.02.06 13:27) [80]
> > В какой старой версии паскаля без оператора GOTO нельзя
> было обойтись ?
>
> Вопрос несколько странен.
>
> В оригинальном паскеле, предложенным Виртом, goto вообще
> нет, насколько я знаю.
>
> Goto ввел Борланд в свой компилятор Borland Pascal, и с
> тех времен им приходится продолжать его поддерживать во
> всех новых компиляторах для совместимости.

Неверно. Метки и GoTo появились еще до того, как Борланд выпустил свой компилятор.


 
Defunct ©   (2006-03-01 19:28) [86]

Amoeba ©   (01.03.06 12:44) [85]

Суть не в том, а в том что Borland при всем желании не сможет отказаться от поддержки GOTO.


 
Игорь Шевченко ©   (2006-03-01 19:37) [87]

Defunct ©   (01.03.06 19:28) [86]


> Суть не в том, а в том что Borland при всем желании не сможет
> отказаться от поддержки GOTO.


Так все-таки Борланд виноват или ты выдаешь желаемое за действительное ?

Читай: http://kokshetau.online.kz/work/PASCAL.htm

"От языка Паскаль принято отсчитывать эпоху структурного программирования. А все началось с того, что известный голландский специалист Эдсгер Дейкстра опубликовал статью «Структурное программирование» (Dijkstra E.W. Structured Programming // NATO Science Committee, 1969). В ней он предложил ограничить логику управления программы всего тремя формами: следованием (sequence), ветвлением (selection) и циклом (iteration). Из этого вытекало, что в языках Алгол и ПЛ/1 оператор безусловного перехода (goto) был уже попросту не нужен. Вирт, правда, не рискнул изъять его из Паскаля"

Много думай над прочитанным.


 
Defunct ©   (2006-03-02 00:30) [88]


> Так все-таки Борланд виноват или ты выдаешь желаемое за
> действительное ?


Ни в коем разе не пытаюсь никого обвинить или выдать желаемое за действительное. За метериал - спасибо. А там где я говорил про Паскаль предложенный Виртом, я, очевидно, ошибся. (там кстати было написано, "насколько я знаю", а ведь я могу и ошибаться.

PS: Игорь, а толк думать-то над прочитанным. Если мне вдруг попадется задача где я не смогу обойтись без ГОТО, неужели ты думаешь я буду долго раздумывать использовать мне его или нет. Молча применю, и скажу так и надо. Но пока мне не попалось ни одного алгоритма, реализация которого на Паскале было бы хоть чем-то лучше реализации без использования GOTO.  На асме - не вопрос, там без ГОТО никак, так что я привыкший.


 
Игорь Шевченко ©   (2006-03-02 01:15) [89]

Defunct ©   (02.03.06 00:30) [88]


>  а толк думать-то над прочитанным


Толк простой - если в языке есть какое-то средство, очевидно, есть и какие-то причины его использовать, и объявлять какую-то конструкцию языка глюкодромом - это выглядит несолидно. Люди старались, создавали язык, думали над тем, что туда включить....Вот если бы ты создал подобный широко используемый язык, тогда, разумеется, твоя критика конструкций паскаля выглядела бы более весомой, особенно с аргументами.

А так - мальчишество и не более того.


> Но пока мне не попалось ни одного алгоритма, реализация
> которого на Паскале было бы хоть чем-то лучше реализации
> без использования GOTO.


Мне попадались. На С правда, но языки-то равномощные. Я не могу сказать, что попадавшиеся алгоритмы блистали изяществом, кстати, все они относились к синтаксическому разбору, но тем не менее, они оптимально выполняли свои функции, были написны достаточно ясно для того, чтобы код можно было сопровождать.

Так что всякий овощ приносит пользу будучи употреблен надлежащим образом в надлежащее время.

Удачи!


 
Мнение   (2006-03-02 06:28) [90]

Удалено модератором


 
Особое мнение   (2006-03-03 05:18) [91]

Удалено модератором
Примечание: За повторение подобных выступлений последует режим чтения



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.71 MB
Время: 0.015 c
2-1141044256
Param[...]
2006-02-27 15:44
2006.03.19
Добрый день. Никак не могу разобраться с параметрами


1-1139728417
Vacek
2006-02-12 10:13
2006.03.19
Как сделать проект always on top?


1-1139856622
Дубинка
2006-02-13 21:50
2006.03.19
Эмуляция клика


2-1141639332
Dysan
2006-03-06 13:02
2006.03.19
как заменить программе саму себя?


15-1141030750
Dok_3D
2006-02-27 11:59
2006.03.19
Borland прощается с ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский