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

Вниз

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

 
Yegorchic ©   (2004-04-20 21:40) [0]

Здрасте все... Есть такой код:

implementation

{$R *.dfm}

label labelX;

procedure XXXXXXX;
...
goto labelX;
...
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;

end.

Что не так? Почему он пишет "Label "labelX" is not declared in current procedure"?

Может это и глупый вопрос (я не знаю), но дайте на него ответ.
Заренее спасибо.


 
Yegorchic ©   (2004-04-20 21:40) [0]

Здрасте все... Есть такой код:

implementation

{$R *.dfm}

label labelX;

procedure XXXXXXX;
...
goto labelX;
...
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;

end.

Что не так? Почему он пишет "Label "labelX" is not declared in current procedure"?

Может это и глупый вопрос (я не знаю), но дайте на него ответ.
Заренее спасибо.


 
Rouse_ ©   (2004-04-20 21:42) [1]

> Label "labelX" is not declared in current procedure
Переменная labelX не объявлена в текущей процедуре.
Что еще не понятно? Это ж тебе не Бэйсик.
И вообщето Goto и Label - моветон...


 
Rouse_ ©   (2004-04-20 21:42) [1]

> Label "labelX" is not declared in current procedure
Переменная labelX не объявлена в текущей процедуре.
Что еще не понятно? Это ж тебе не Бэйсик.
И вообщето Goto и Label - моветон...


 
Mihey ©   (2004-04-20 22:44) [2]

Угу, label только в пределах блока (т.е. внутри процедуры, функции).


 
Mihey ©   (2004-04-20 22:44) [2]

Угу, label только в пределах блока (т.е. внутри процедуры, функции).


 
ASvencim ©   (2004-04-20 22:50) [3]

И вообще, приличные люди goto не используют (не пойму почему)


 
ASvencim ©   (2004-04-20 22:50) [3]

И вообще, приличные люди goto не используют (не пойму почему)


 
Dimaxx ©   (2004-04-20 23:12) [4]

Просто использование этого оператора не является правилом хорошего программера (где-то читал). Попробуй обойтись без него.


 
Dimaxx ©   (2004-04-20 23:12) [4]

Просто использование этого оператора не является правилом хорошего программера (где-то читал). Попробуй обойтись без него.


 
Gero ©   (2004-04-20 23:19) [5]


> не пойму почему

Потому, что Вы его должным образом и не использовали.
Помню, у меня когда-то очень давно довольно большая программа на Паскале.
Я тогда был совсем новичком в программировании, процедуры почти не использовал, а вместо них - goto.
Поначалу было ничего.
Но когда количество label"ов перевалило за 30...
И все они были сложно сплетены...
После этого я дал себе слово по мере возможности не использовать goto.
Что и делаю.


 
Gero ©   (2004-04-20 23:19) [5]


> не пойму почему

Потому, что Вы его должным образом и не использовали.
Помню, у меня когда-то очень давно довольно большая программа на Паскале.
Я тогда был совсем новичком в программировании, процедуры почти не использовал, а вместо них - goto.
Поначалу было ничего.
Но когда количество label"ов перевалило за 30...
И все они были сложно сплетены...
После этого я дал себе слово по мере возможности не использовать goto.
Что и делаю.


 
Игорь Шевченко ©   (2004-04-21 00:03) [6]


> После этого я дал себе слово по мере возможности не использовать
> goto.


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


 
Игорь Шевченко ©   (2004-04-21 00:03) [6]


> После этого я дал себе слово по мере возможности не использовать
> goto.


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


 
Курдль ©   (2004-04-21 00:16) [7]


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

Не согласен. Не для того тужился Никлаус Вирт над Паскалем, чтобы в нем Goto и Label пихали куда ни попадя! Если есть острая необходимость воспользоваться "машиноподобными кодами" - сделайте ассемблерную вставочку (это еще можно как-то объяснить погоней за производительностью). Но Паскаль тем и хорош, что заставляет соблюдать модульную строгость программы. Для этого масса возможностей - "операторные скобки" begin ... end, процедуры, функции...


 
Курдль ©   (2004-04-21 00:16) [7]


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

Не согласен. Не для того тужился Никлаус Вирт над Паскалем, чтобы в нем Goto и Label пихали куда ни попадя! Если есть острая необходимость воспользоваться "машиноподобными кодами" - сделайте ассемблерную вставочку (это еще можно как-то объяснить погоней за производительностью). Но Паскаль тем и хорош, что заставляет соблюдать модульную строгость программы. Для этого масса возможностей - "операторные скобки" begin ... end, процедуры, функции...


 
Gero ©   (2004-04-21 00:22) [8]


Игорь Шевченко ©   (21.04.04 00:03)

Обратите внимание:

> После этого я дал себе слово по мере возможности не использовать
> goto


 
Gero ©   (2004-04-21 00:22) [8]


Игорь Шевченко ©   (21.04.04 00:03)

Обратите внимание:

> После этого я дал себе слово по мере возможности не использовать
> goto


 
Алхимик ©   (2004-04-21 00:30) [9]

>[7] Курдль ©   (21.04.04 00:16)
procedure Test(Param1..ParamN : TMyType);
var
  i,j,k,m,... : integer;
begin
  <создание чего-то>
  for i := 1 to 1000000 do begin
     for j := 1 to 1000000 do begin
        for k := 1 to 1000000 do begin
           repeat
              <жуткие вычисления>
              if <лажа> then goto FINISH;
           until m = -1;    
        end;
     end;
  end;
  <вывод результатов жутких вычислений>
  FINISH:
  <уничтожение чего-то>  
end;


Удобнее с GOTO?


 
Алхимик ©   (2004-04-21 00:30) [9]

>[7] Курдль ©   (21.04.04 00:16)
procedure Test(Param1..ParamN : TMyType);
var
  i,j,k,m,... : integer;
begin
  <создание чего-то>
  for i := 1 to 1000000 do begin
     for j := 1 to 1000000 do begin
        for k := 1 to 1000000 do begin
           repeat
              <жуткие вычисления>
              if <лажа> then goto FINISH;
           until m = -1;    
        end;
     end;
  end;
  <вывод результатов жутких вычислений>
  FINISH:
  <уничтожение чего-то>  
end;


Удобнее с GOTO?


 
Курдль ©   (2004-04-21 00:33) [10]


> if <лажа> then goto FINISH;

if <лажа> then break;


> Удобнее с GOTO?

Нет! И еще мэтодически нэверно!


 
Курдль ©   (2004-04-21 00:33) [10]


> if <лажа> then goto FINISH;

if <лажа> then break;


> Удобнее с GOTO?

Нет! И еще мэтодически нэверно!


 
Anatoly Podgoretsky ©   (2004-04-21 00:33) [11]

ASvencim ©   (20.04.04 22:50) [3]
Потому что приличные люди.


 
Anatoly Podgoretsky ©   (2004-04-21 00:33) [11]

ASvencim ©   (20.04.04 22:50) [3]
Потому что приличные люди.


 
Mihey ©   (2004-04-21 00:35) [12]

Goto lives and rules форева!!!!


 
Mihey ©   (2004-04-21 00:35) [12]

Goto lives and rules форева!!!!


 
Almaz ©   (2004-04-21 00:41) [13]


> Курдль ©   (21.04.04 00:33) [10]
>
> > if <лажа> then goto FINISH;
>
> if <лажа> then break;
>

А теперь задумайтесь, правомерна ли такая замена ;) А она не правомерна, т.к. break в данном случае прервет выполнение только цикла repeat ... until, а в исходном варианте с goto прерывается выполнение всех вложенных циклов. Альтернатива goto здесь - это использование механизма исключений, но я бы использовал именно goto - это один из немногих случаев, где эта конструкция оправдана.

Удачи.


 
Almaz ©   (2004-04-21 00:41) [13]


> Курдль ©   (21.04.04 00:33) [10]
>
> > if <лажа> then goto FINISH;
>
> if <лажа> then break;
>

А теперь задумайтесь, правомерна ли такая замена ;) А она не правомерна, т.к. break в данном случае прервет выполнение только цикла repeat ... until, а в исходном варианте с goto прерывается выполнение всех вложенных циклов. Альтернатива goto здесь - это использование механизма исключений, но я бы использовал именно goto - это один из немногих случаев, где эта конструкция оправдана.

Удачи.


 
Игорь Шевченко ©   (2004-04-21 00:44) [14]

[8] Gero ©   (21.04.04 00:22)

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

С уважением,


 
Игорь Шевченко ©   (2004-04-21 00:44) [14]

[8] Gero ©   (21.04.04 00:22)

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

С уважением,


 
Курдль ©   (2004-04-21 00:46) [15]


> Almaz ©

Каюсь! :)


 
Курдль ©   (2004-04-21 00:46) [15]


> Almaz ©

Каюсь! :)


 
Verg ©   (2004-04-21 05:55) [16]

procedure Test(Param1..ParamN : TMyType);
var
 i,j,k,m,... : integer;
begin
 <создание чего-то>
 try
 for i := 1 to 1000000 do begin
    for j := 1 to 1000000 do begin
       for k := 1 to 1000000 do begin
          repeat
             <жуткие вычисления>
             if <лажа> then exit;//goto FINISH;
          until m = -1;    
       end;
    end;
 end;
 <вывод результатов жутких вычислений>
 finally
 //  FINISH:
 <уничтожение чего-то>  
 end;
end;


 
Verg ©   (2004-04-21 05:55) [16]

procedure Test(Param1..ParamN : TMyType);
var
 i,j,k,m,... : integer;
begin
 <создание чего-то>
 try
 for i := 1 to 1000000 do begin
    for j := 1 to 1000000 do begin
       for k := 1 to 1000000 do begin
          repeat
             <жуткие вычисления>
             if <лажа> then exit;//goto FINISH;
          until m = -1;    
       end;
    end;
 end;
 <вывод результатов жутких вычислений>
 finally
 //  FINISH:
 <уничтожение чего-то>  
 end;
end;


 
Gero ©   (2004-04-21 07:43) [17]


> Verg ©   (21.04.04 05:55)

procedure Test(Param1..ParamN : TMyType);
procedure ThreeForAndRepeat;
var
  i,j,k,m,... : integer;
 begin
   for i := 1 to 1000000 do begin
     for j := 1 to 1000000 do begin
       for k := 1 to 1000000 do begin
         repeat
            <жуткие вычисления>
            if <лажа> then exit; // no problem
         until m = -1;    
       end;
     end;
   end;
   <вывод результатов жутких вычислений>
 end;

begin
<создание чего-то>
try
  ThreeForAndRepeat;
finally
<уничтожение чего-то>  
end;
end;

Катит? ;)


 
Gero ©   (2004-04-21 07:43) [17]


> Verg ©   (21.04.04 05:55)

procedure Test(Param1..ParamN : TMyType);
procedure ThreeForAndRepeat;
var
  i,j,k,m,... : integer;
 begin
   for i := 1 to 1000000 do begin
     for j := 1 to 1000000 do begin
       for k := 1 to 1000000 do begin
         repeat
            <жуткие вычисления>
            if <лажа> then exit; // no problem
         until m = -1;    
       end;
     end;
   end;
   <вывод результатов жутких вычислений>
 end;

begin
<создание чего-то>
try
  ThreeForAndRepeat;
finally
<уничтожение чего-то>  
end;
end;

Катит? ;)


 
Verg ©   (2004-04-21 07:49) [18]


> Gero ©   (21.04.04 07:43) [17]


Катит.

А в чем "изюм"?


 
Verg ©   (2004-04-21 07:49) [18]


> Gero ©   (21.04.04 07:43) [17]


Катит.

А в чем "изюм"?


 
Gero ©   (2004-04-21 07:53) [19]


> Verg ©   (21.04.04 07:49)

В вашем примере finally-то не выполнится.


 
Gero ©   (2004-04-21 07:53) [19]


> Verg ©   (21.04.04 07:49)

В вашем примере finally-то не выполнится.


 
Verg ©   (2004-04-21 07:54) [20]


> Gero ©   (21.04.04 07:53) [19]


Заблуждаешься.

try
finally
end;

- секция finally выполнится в любом случае. Каким бы способом блок try не покинули: continue, break, exit или исключение.


 
Verg ©   (2004-04-21 07:54) [20]


> Gero ©   (21.04.04 07:53) [19]


Заблуждаешься.

try
finally
end;

- секция finally выполнится в любом случае. Каким бы способом блок try не покинули: continue, break, exit или исключение.


 
Gero ©   (2004-04-21 07:59) [21]


> Verg ©   (21.04.04 07:54)

Спасибо, не знал.


 
Gero ©   (2004-04-21 07:59) [21]


> Verg ©   (21.04.04 07:54)

Спасибо, не знал.


 
Gero ©   (2004-04-21 08:05) [22]


> Verg ©   (21.04.04 07:54)

То есть, если в блоке try я вызову Exit, то это будет выход только из try?


 
Gero ©   (2004-04-21 08:05) [22]


> Verg ©   (21.04.04 07:54)

То есть, если в блоке try я вызову Exit, то это будет выход только из try?


 
Verg ©   (2004-04-21 08:15) [23]


> Gero ©   (21.04.04 08:05) [22]
>
> > Verg ©   (21.04.04 07:54)
>
> То есть, если в блоке try я вызову Exit, то это будет выход
> только из try?


Почему же, и из процедуры тоже, но перед этим выполнится(нятся) все секции finally этого(их) try блока(ов).

procedure F1(Par, Par2 : boolen);
begin
 try
   if Par then exit;
 finally;
   ShowMessage("Выход 1");
   if Par2 then exit;
 end;
 ShowMessage("Выход 2");
end;


Поэкп. с этой ф-цией.


 
Verg ©   (2004-04-21 08:15) [23]


> Gero ©   (21.04.04 08:05) [22]
>
> > Verg ©   (21.04.04 07:54)
>
> То есть, если в блоке try я вызову Exit, то это будет выход
> только из try?


Почему же, и из процедуры тоже, но перед этим выполнится(нятся) все секции finally этого(их) try блока(ов).

procedure F1(Par, Par2 : boolen);
begin
 try
   if Par then exit;
 finally;
   ShowMessage("Выход 1");
   if Par2 then exit;
 end;
 ShowMessage("Выход 2");
end;


Поэкп. с этой ф-цией.


 
Gero ©   (2004-04-21 08:18) [24]

> Verg ©   (21.04.04 08:15)

Все, я Вас понял. Спасибо.


 
Gero ©   (2004-04-21 08:18) [24]

> Verg ©   (21.04.04 08:15)

Все, я Вас понял. Спасибо.


 
Verg ©   (2004-04-21 08:20) [25]

Ты там увидишь, что Exit из секции finally вообще делать нельзя (кстати, забыл еще там goto в секции try - тоже не даст сделать).
если par1 = true, то произойдет "Выход 1", но "Выход 2" выполнен не будет. Если Par1 = False, то будет и "Выход 1" и "Выход 2".


 
Verg ©   (2004-04-21 08:20) [25]

Ты там увидишь, что Exit из секции finally вообще делать нельзя (кстати, забыл еще там goto в секции try - тоже не даст сделать).
если par1 = true, то произойдет "Выход 1", но "Выход 2" выполнен не будет. Если Par1 = False, то будет и "Выход 1" и "Выход 2".


 
Verg ©   (2004-04-21 08:24) [26]

Вот для упражнений....
procedure F1(Par: boolean);
label l1;
begin
try
  if Par then exit;
//   goto l1; // Ошибка
finally;
  ShowMessage("Выход 1");
//   exit; // Ошибка
end;
l1:;
ShowMessage("Выход 2");
end;


 
Verg ©   (2004-04-21 08:24) [26]

Вот для упражнений....
procedure F1(Par: boolean);
label l1;
begin
try
  if Par then exit;
//   goto l1; // Ошибка
finally;
  ShowMessage("Выход 1");
//   exit; // Ошибка
end;
l1:;
ShowMessage("Выход 2");
end;


 
vengo   (2004-04-21 10:33) [27]

implementation

{$R *.dfm}

label labelX;

procedure XXXXXXX;
...
goto labelX;  //здесь не работает
...
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;

begin
  ...............
  goto labelX;   //здесь goto работает
  ...............
labelX:
  ...............

end.


 
vengo   (2004-04-21 10:33) [27]

implementation

{$R *.dfm}

label labelX;

procedure XXXXXXX;
...
goto labelX;  //здесь не работает
...
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
labelX:
...
end;

begin
  ...............
  goto labelX;   //здесь goto работает
  ...............
labelX:
  ...............

end.


 
panov ©   (2004-04-21 10:38) [28]

бред, простите за выражение.


 
panov ©   (2004-04-21 10:38) [28]

бред, простите за выражение.


 
PVOzerski ©   (2004-04-21 11:26) [29]

IMHO, не надо превращать борьбу с goto в какой-то "религиозный" обряд. Ну, можно выскочить из цикла через сочетания exit и try. А зачем огород-то такой городить? И читаемости кода это не прибавит (а я вообще, например, только недавно узнал, что при выходе по exit всё равно отрабатывает секция finally), и "тормозов", связанных с включением кода, ответственного за обработку исключений, прибавит.


 
PVOzerski ©   (2004-04-21 11:26) [29]

IMHO, не надо превращать борьбу с goto в какой-то "религиозный" обряд. Ну, можно выскочить из цикла через сочетания exit и try. А зачем огород-то такой городить? И читаемости кода это не прибавит (а я вообще, например, только недавно узнал, что при выходе по exit всё равно отрабатывает секция finally), и "тормозов", связанных с включением кода, ответственного за обработку исключений, прибавит.


 
Андрей Сенченко ©   (2004-04-21 11:37) [30]

PVOzerski ©   (21.04.04 11:26) [29]

Ну откровенно говоря и само GOTO с читаемостью кода мало сочетается, а вот метод try - exit - finally хорош безусловно.
Лично я вываливался из вложенных циклов boolean-овым флагом и break-ами, что тоже не очень удобно.


 
Андрей Сенченко ©   (2004-04-21 11:37) [30]

PVOzerski ©   (21.04.04 11:26) [29]

Ну откровенно говоря и само GOTO с читаемостью кода мало сочетается, а вот метод try - exit - finally хорош безусловно.
Лично я вываливался из вложенных циклов boolean-овым флагом и break-ами, что тоже не очень удобно.


 
Verg ©   (2004-04-21 12:01) [31]


> PVOzerski ©   (21.04.04 11:26) [29]


Зря ты думаешь, что это "обряд".
В том примере try finally и так было бы желательно поставить, так как есть <создаем чего-то> и <уничтожаем чего-то>. Так почему бы двух зайцев сразу не заколбасить? :)


 
Verg ©   (2004-04-21 12:01) [31]


> PVOzerski ©   (21.04.04 11:26) [29]


Зря ты думаешь, что это "обряд".
В том примере try finally и так было бы желательно поставить, так как есть <создаем чего-то> и <уничтожаем чего-то>. Так почему бы двух зайцев сразу не заколбасить? :)


 
Григорьев Антон   (2004-04-21 12:06) [32]

К сожалению, в Delphi очень не хватает оператора Exit а-ля Ада, в котором можно явно указать, из скольки вложенных циклов надо выйти.


 
Григорьев Антон   (2004-04-21 12:06) [32]

К сожалению, в Delphi очень не хватает оператора Exit а-ля Ада, в котором можно явно указать, из скольки вложенных циклов надо выйти.


 
KSergey ©   (2004-04-21 12:23) [33]

> Григорьев Антон   (21.04.04 12:06)

Есть! Завется GOTO ;)

Мне думается, что в Aду ввели этот Exit лишь бы не использовать goto. Чтобы потом можно было сказать "а у нас гото нет, мы - крутой язык". Т.к. по сути это все равно одно и тоже получается.


 
KSergey ©   (2004-04-21 12:23) [33]

> Григорьев Антон   (21.04.04 12:06)

Есть! Завется GOTO ;)

Мне думается, что в Aду ввели этот Exit лишь бы не использовать goto. Чтобы потом можно было сказать "а у нас гото нет, мы - крутой язык". Т.к. по сути это все равно одно и тоже получается.


 
ZrenBy ©   (2004-04-21 12:29) [34]

Я как-то год-полтора назад одному противнику goto
предлагал переписать одну процедурку, использующую goto,
без использования оного.

Но при этом ставил два условия.

1. Не должно быть вызовов функций/процедур.
2. Не должно быть повторяющегося кода.

Противник goto тогда вызов не принял.


 
ZrenBy ©   (2004-04-21 12:29) [34]

Я как-то год-полтора назад одному противнику goto
предлагал переписать одну процедурку, использующую goto,
без использования оного.

Но при этом ставил два условия.

1. Не должно быть вызовов функций/процедур.
2. Не должно быть повторяющегося кода.

Противник goto тогда вызов не принял.


 
KSergey ©   (2004-04-21 12:53) [35]

> 1. Не должно быть вызовов функций/процедур.

Странноватое требование...
Т.е. условия таковы, чтобы этого в принципе нельзя было сделать??

Для меня апогеем, убедившим в том, что использовать goto - вполне легитимно, явился такой фрагмент кода в одном примере. Причем я приведу лишь макет, на нем-то все видно, а реальный код был куда больше, со вложенными циклами, весь этот макет не сразу проглядывался, а потому я долго (минут 20, может я тупой?) силился понять зафиг так было делать (пример будет на паскале):

repeat
 .......
 .......
 .......
 if ... then  continue;
 .......
 .......
until True;


Я долго не мог понять зачем было делать цикл, который никогда на второй проход не пойдет?? И только через какое-то время таки разглядел это if с continue. Да, goto здесь нет, но так ли уж его формальное отсутствие здесь выигрышно?


 
KSergey ©   (2004-04-21 12:53) [35]

> 1. Не должно быть вызовов функций/процедур.

Странноватое требование...
Т.е. условия таковы, чтобы этого в принципе нельзя было сделать??

Для меня апогеем, убедившим в том, что использовать goto - вполне легитимно, явился такой фрагмент кода в одном примере. Причем я приведу лишь макет, на нем-то все видно, а реальный код был куда больше, со вложенными циклами, весь этот макет не сразу проглядывался, а потому я долго (минут 20, может я тупой?) силился понять зафиг так было делать (пример будет на паскале):

repeat
 .......
 .......
 .......
 if ... then  continue;
 .......
 .......
until True;


Я долго не мог понять зачем было делать цикл, который никогда на второй проход не пойдет?? И только через какое-то время таки разглядел это if с continue. Да, goto здесь нет, но так ли уж его формальное отсутствие здесь выигрышно?


 
Verg ©   (2004-04-21 13:05) [36]


> Да, goto здесь нет, но так ли уж его формальное отсутствие
> здесь выигрышно?

repeat
 ........................
 ........................
 GetMem(...);
 try
   ........................
   ........................
   if ... then  continue;
   ........................
   ........................
 finally
   FreeMem(....)
 end;
 ........................
 ........................
until True;


 
Verg ©   (2004-04-21 13:05) [36]


> Да, goto здесь нет, но так ли уж его формальное отсутствие
> здесь выигрышно?

repeat
 ........................
 ........................
 GetMem(...);
 try
   ........................
   ........................
   if ... then  continue;
   ........................
   ........................
 finally
   FreeMem(....)
 end;
 ........................
 ........................
until True;


 
Fay ©   (2004-04-21 13:13) [37]

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


 
Fay ©   (2004-04-21 13:13) [37]

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


 
WebErr ©   (2004-04-21 13:22) [38]

Должна быть в Делфи процедура неокального перехода по метке, так как в Borland C++ (ANSI standard) она есть! Просто эта тема непопулярна, поэтому ей редко уделяют внимание в книгах, так как всегда можно обойтись без goto тем более нелокального (не очевидный, но факт!).


 
WebErr ©   (2004-04-21 13:22) [38]

Должна быть в Делфи процедура неокального перехода по метке, так как в Borland C++ (ANSI standard) она есть! Просто эта тема непопулярна, поэтому ей редко уделяют внимание в книгах, так как всегда можно обойтись без goto тем более нелокального (не очевидный, но факт!).


 
Григорьев Антон   (2004-04-21 13:36) [39]


> KSergey ©   (21.04.04 12:23) [33]
> > Григорьев Антон   (21.04.04 12:06)
>
> Есть! Завется GOTO ;)
>
> Мне думается, что в Aду ввели этот Exit лишь бы не использовать
> goto. Чтобы потом можно было сказать "а у нас гото нет,
> мы - крутой язык". Т.к. по сути это все равно одно и тоже
> получается.


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


 
Григорьев Антон   (2004-04-21 13:36) [39]


> KSergey ©   (21.04.04 12:23) [33]
> > Григорьев Антон   (21.04.04 12:06)
>
> Есть! Завется GOTO ;)
>
> Мне думается, что в Aду ввели этот Exit лишь бы не использовать
> goto. Чтобы потом можно было сказать "а у нас гото нет,
> мы - крутой язык". Т.к. по сути это все равно одно и тоже
> получается.


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


 
Андрей Сенченко ©   (2004-04-21 13:36) [40]

Verg ©   (21.04.04 13:05) [36]

В приведенном Вами коде ничто не мешает поставить условие
if false goto
вместо
continue
..
until true;

GetMem() - FreeMem реализуется и в этом случае без использования защищенных блоков.


 
Андрей Сенченко ©   (2004-04-21 13:36) [40]

Verg ©   (21.04.04 13:05) [36]

В приведенном Вами коде ничто не мешает поставить условие
if false goto
вместо
continue
..
until true;

GetMem() - FreeMem реализуется и в этом случае без использования защищенных блоков.



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

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

Наверх




Память: 0.67 MB
Время: 0.045 c
1-1082719243
hawkins
2004-04-23 15:20
2004.05.09
как програмно присвоить обработчик события OnMouseMove у ListBox


1-1082453858
Litva
2004-04-20 13:37
2004.05.09
Exel v DB


1-1082551540
vin
2004-04-21 16:45
2004.05.09
PopupMenu на раскрытом ComboBox-е


3-1081947063
Oksana
2004-04-14 16:51
2004.05.09
Ошибка при открытии dbf через ADO


1-1082619455
user_2
2004-04-22 11:37
2004.05.09
MDI form





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский