Главная страница
    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 реализуется и в этом случае без использования защищенных блоков.


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

>  [36] Verg ©   (21.04.04 13:05)

Нет, давайте не будет перевирать.
Язык на котором реально все это рассматривалось не имел механизма исключений.
А понимаю, что можно придумать ситуацию, когда это какбы "будет хорошо", но тогда уж проще (и логичнее, по-моему) действительно воспользоваться механизмом исключений.
Да и все же странно прмер ваш выглядит: с одной стороны - "странный" (да!) "цикл", с другой - структурная обработка исключений.
Это пример явно неудачного кода в плане смешения стилей


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

>  [36] Verg ©   (21.04.04 13:05)

Нет, давайте не будет перевирать.
Язык на котором реально все это рассматривалось не имел механизма исключений.
А понимаю, что можно придумать ситуацию, когда это какбы "будет хорошо", но тогда уж проще (и логичнее, по-моему) действительно воспользоваться механизмом исключений.
Да и все же странно прмер ваш выглядит: с одной стороны - "странный" (да!) "цикл", с другой - структурная обработка исключений.
Это пример явно неудачного кода в плане смешения стилей


 
WebErr ©   (2004-04-21 13:40) [42]

ИМХО [38]


 
WebErr ©   (2004-04-21 13:40) [42]

ИМХО [38]


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


> ZrenBy ©   (21.04.04 12:29) [34]
> Я как-то год-полтора назад одному противнику goto
> предлагал переписать одну процедурку, использующую goto,
> без использования оного.
>
> Но при этом ставил два условия.
>
> 1. Не должно быть вызовов функций/процедур.
> 2. Не должно быть повторяющегося кода.
>
> Противник goto тогда вызов не принял.


Осталось предложить не использовать JMP в ассемблере...

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


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


Ну и что? Человек просто не умеет программировать. Не надо делать из этого далеко идущие выводы. Вот код, который делает то же самое без goto и без однократного цикла:

.......
if not ... then
begin
 ....
end;



> WebErr ©   (21.04.04 13:22) [38]
> Должна быть в Делфи процедура неокального перехода по метке,
> так как в Borland C++ (ANSI standard) она есть!


А стандарты C++ здесь вообще при чём? Delphi - это, строго говоря, никем не стандартизированный язык, и никакие чужие стандарты ему не указ. В конце концов, в Delphi ещё много чего нет, что есть в C++, и слава богу, что нет.


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


> ZrenBy ©   (21.04.04 12:29) [34]
> Я как-то год-полтора назад одному противнику goto
> предлагал переписать одну процедурку, использующую goto,
> без использования оного.
>
> Но при этом ставил два условия.
>
> 1. Не должно быть вызовов функций/процедур.
> 2. Не должно быть повторяющегося кода.
>
> Противник goto тогда вызов не принял.


Осталось предложить не использовать JMP в ассемблере...

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


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


Ну и что? Человек просто не умеет программировать. Не надо делать из этого далеко идущие выводы. Вот код, который делает то же самое без goto и без однократного цикла:

.......
if not ... then
begin
 ....
end;



> WebErr ©   (21.04.04 13:22) [38]
> Должна быть в Делфи процедура неокального перехода по метке,
> так как в Borland C++ (ANSI standard) она есть!


А стандарты C++ здесь вообще при чём? Delphi - это, строго говоря, никем не стандартизированный язык, и никакие чужие стандарты ему не указ. В конце концов, в Delphi ещё много чего нет, что есть в C++, и слава богу, что нет.


 
Verg ©   (2004-04-21 13:58) [44]


> KSergey ©   (21.04.04 13:37) [41]


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

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


 
Verg ©   (2004-04-21 13:58) [44]


> KSergey ©   (21.04.04 13:37) [41]


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

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


 
Verg ©   (2004-04-21 14:00) [45]


> Андрей Сенченко ©   (21.04.04 13:36) [40]


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


 
Verg ©   (2004-04-21 14:00) [45]


> Андрей Сенченко ©   (21.04.04 13:36) [40]


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


 
WebErr ©   (2004-04-21 14:02) [46]

Вообще нелокальный goto можно заменить на вызов определённой функции, с предварительной установкой некоего флага!


 
WebErr ©   (2004-04-21 14:02) [46]

Вообще нелокальный goto можно заменить на вызов определённой функции, с предварительной установкой некоего флага!


 
Андрей Сенченко ©   (2004-04-21 14:09) [47]

Verg ©   (21.04.04 14:00) [45]

мешает там что-то чему-то или не мешает

Имелось в виду все-таки тривиальное содержание. А так там можно и HALT всадить.

Насколько я помню по форуму - Вы неплохо разбираетесь в АСМе. Я - нет, мне сложно оценивать, но если не сложно - просветите пожалуйста - чем будут отличаться машинные интрукции выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок Finally ? На мой взгляд - одно и то же. Грубый тык компилятору куда идти дальше за кодом. Разница в названиях или в чем-то более ощутимом ?


 
Андрей Сенченко ©   (2004-04-21 14:09) [47]

Verg ©   (21.04.04 14:00) [45]

мешает там что-то чему-то или не мешает

Имелось в виду все-таки тривиальное содержание. А так там можно и HALT всадить.

Насколько я помню по форуму - Вы неплохо разбираетесь в АСМе. Я - нет, мне сложно оценивать, но если не сложно - просветите пожалуйста - чем будут отличаться машинные интрукции выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок Finally ? На мой взгляд - одно и то же. Грубый тык компилятору куда идти дальше за кодом. Разница в названиях или в чем-то более ощутимом ?


 
Verg ©   (2004-04-21 14:32) [48]


> Андрей Сенченко ©   (21.04.04 14:09) [47]
> Verg ©   (21.04.04 14:00) [45]
>
> мешает там что-то чему-то или не мешает
>
> Имелось в виду все-таки тривиальное содержание. А так там
> можно и HALT всадить.


При чем тут halt? Да пользуйтесь вы наздоровье goto. Я что, запрещаю? :)


>
> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?


При чем тут ASM вообще?

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


 
Verg ©   (2004-04-21 14:32) [48]


> Андрей Сенченко ©   (21.04.04 14:09) [47]
> Verg ©   (21.04.04 14:00) [45]
>
> мешает там что-то чему-то или не мешает
>
> Имелось в виду все-таки тривиальное содержание. А так там
> можно и HALT всадить.


При чем тут halt? Да пользуйтесь вы наздоровье goto. Я что, запрещаю? :)


>
> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?


При чем тут ASM вообще?

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


 
WebErr ©   (2004-04-21 14:35) [49]


> Андрей Сенченко ©   (21.04.04 14:09) [47]

Если Вы про Асм, то там кроме goto чего только нету!!!
И if нету, и else нету, и даже for нету и while!
Только одиноко стоящий call среди кучи всяких повторяющихся goto типа jl, je, jz, ja, jb, jg, ... и так до 00


 
WebErr ©   (2004-04-21 14:35) [49]


> Андрей Сенченко ©   (21.04.04 14:09) [47]

Если Вы про Асм, то там кроме goto чего только нету!!!
И if нету, и else нету, и даже for нету и while!
Только одиноко стоящий call среди кучи всяких повторяющихся goto типа jl, je, jz, ja, jb, jg, ... и так до 00


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

о тои и речь


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

о тои и речь


 
Григорьев Антон   (2004-04-21 14:53) [51]


> Андрей Сенченко ©



> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?


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


 
Григорьев Антон   (2004-04-21 14:53) [51]


> Андрей Сенченко ©



> Насколько я помню по форуму - Вы неплохо разбираетесь в
> АСМе. Я - нет, мне сложно оценивать, но если не сложно -
> просветите пожалуйста - чем будут отличаться машинные интрукции
> выхода из цикла GOTO и перехода EXIT-ом из блока Try в блок
> Finally ? На мой взгляд - одно и то же. Грубый тык компилятору
> куда идти дальше за кодом. Разница в названиях или в чем-то
> более ощутимом ?


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


 
Fay ©   (2004-04-21 14:56) [52]

"кучу вредных вещей" можно с помощью чего угодно. В том числе TCurveHands.


 
Fay ©   (2004-04-21 14:56) [52]

"кучу вредных вещей" можно с помощью чего угодно. В том числе TCurveHands.


 
Андрей Сенченко ©   (2004-04-21 14:56) [53]

Verg ©   (21.04.04 14:32) [48]

Вы наверное не совсем поняли  .. я и без GOTO куда угодно выскочу.
Я, откровенно говоря, уже потерялся в ходе Ваших рассуждений.

Сначала Вы делаете среди многочисленных многоточий выделение и освобождение памяти в защищенном блоке, типа по-другому нельзя.
Можно. Аналогичную структуру можно описать и при помощи GOTO однозначно. Дольше - но можно.
Потом оказывается, что среди тех самых многочисленных многоточий может скрываться еще ЧТО-ТО, что именно - многозначительное же молчание.
Потом оказывается, что все это вообще не имело быть значимым потому что речь шла собственно даже не о GOTO как таковом, а об обязательности (гарантированности) освобождения некоторых, ранее взятых на время ресурсов ( © Verg 2004 )

Откровенно говоря .. мы вообще об одном и том же общаемся или нет ?

Я имел в виду только то, что с точки зрения структуры программы выходы


If <...> Goto -------|
          <---------|


и

try
<...>
EXIT ----------|
finally <------|


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

То есть я рассматривал этот вопрос только с той точки зрения, что указнный Вами метод - красивый способ не использовать оператор GOTO как таковой. О прямом назначении конструкции try - finally речи не шло, только об этой конкретной фиче.

Извините уж, ежели что не так.


 
Андрей Сенченко ©   (2004-04-21 14:56) [53]

Verg ©   (21.04.04 14:32) [48]

Вы наверное не совсем поняли  .. я и без GOTO куда угодно выскочу.
Я, откровенно говоря, уже потерялся в ходе Ваших рассуждений.

Сначала Вы делаете среди многочисленных многоточий выделение и освобождение памяти в защищенном блоке, типа по-другому нельзя.
Можно. Аналогичную структуру можно описать и при помощи GOTO однозначно. Дольше - но можно.
Потом оказывается, что среди тех самых многочисленных многоточий может скрываться еще ЧТО-ТО, что именно - многозначительное же молчание.
Потом оказывается, что все это вообще не имело быть значимым потому что речь шла собственно даже не о GOTO как таковом, а об обязательности (гарантированности) освобождения некоторых, ранее взятых на время ресурсов ( © Verg 2004 )

Откровенно говоря .. мы вообще об одном и том же общаемся или нет ?

Я имел в виду только то, что с точки зрения структуры программы выходы


If <...> Goto -------|
          <---------|


и

try
<...>
EXIT ----------|
finally <------|


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

То есть я рассматривал этот вопрос только с той точки зрения, что указнный Вами метод - красивый способ не использовать оператор GOTO как таковой. О прямом назначении конструкции try - finally речи не шло, только об этой конкретной фиче.

Извините уж, ежели что не так.


 
TUser ©   (2004-04-21 15:01) [54]

Предлагаю организовать Добровольное общество борьбы с Goto, asm, Си, указателями, absolute"ами, незакомментированными строками и прочим стремом, который заставляет кодера думать, о низкоуровневых вещах, отвлекая его от обдумывания алгоритма программы.
А вообще - Goto я давно уже не использовал в реально необходимых прогах. Просто мысли такой не возникает, когда алгоритм обдумываю. Сейчас сижу с асмом разбираюсь - перевожу проги с Паскаля на MIXAL. Первым делом - преобразую каждую прогу так, чтобы убрать все циклы и переделать их на if - Goto. А в реальных прогах высокго уровня этот оператор не нужен.


 
TUser ©   (2004-04-21 15:01) [54]

Предлагаю организовать Добровольное общество борьбы с Goto, asm, Си, указателями, absolute"ами, незакомментированными строками и прочим стремом, который заставляет кодера думать, о низкоуровневых вещах, отвлекая его от обдумывания алгоритма программы.
А вообще - Goto я давно уже не использовал в реально необходимых прогах. Просто мысли такой не возникает, когда алгоритм обдумываю. Сейчас сижу с асмом разбираюсь - перевожу проги с Паскаля на MIXAL. Первым делом - преобразую каждую прогу так, чтобы убрать все циклы и переделать их на if - Goto. А в реальных прогах высокго уровня этот оператор не нужен.


 
Андрей Сенченко ©   (2004-04-21 15:03) [55]

Григорьев Антон   (21.04.04 14:53) [51]

EXIT - только за пределы цикла ... ДА НУ !!!!

procedure AutoKiller;
begin
 EXIT;
 showmessage("Жить хочу !");
end;

Как Вы думаете - мы увидим когда-нибудь тот самый message ?
А где тут цикЛ ?


 
Андрей Сенченко ©   (2004-04-21 15:03) [55]

Григорьев Антон   (21.04.04 14:53) [51]

EXIT - только за пределы цикла ... ДА НУ !!!!

procedure AutoKiller;
begin
 EXIT;
 showmessage("Жить хочу !");
end;

Как Вы думаете - мы увидим когда-нибудь тот самый message ?
А где тут цикЛ ?


 
Smithson ©   (2004-04-21 15:07) [56]

Блок try finally создает специальный SEH-фрэйм (это системный объект). Насколько я помню, эти фрэймы ограничены по вложености (32, кажется) ну и на их создание-удаление тратиться код. При срабатывании этого фрейма возбуждается исключение (процессором, по старому, по-досовски - прерывание). Goto ничего этого не делает, это банальный long jump. Так что ответ на вопрос [53] отрицательный - это не просто не одно и тоже, это совсем разные вещи.


 
Smithson ©   (2004-04-21 15:07) [56]

Блок try finally создает специальный SEH-фрэйм (это системный объект). Насколько я помню, эти фрэймы ограничены по вложености (32, кажется) ну и на их создание-удаление тратиться код. При срабатывании этого фрейма возбуждается исключение (процессором, по старому, по-досовски - прерывание). Goto ничего этого не делает, это банальный long jump. Так что ответ на вопрос [53] отрицательный - это не просто не одно и тоже, это совсем разные вещи.


 
Verg ©   (2004-04-21 15:10) [57]

Андрей Сенченко ©   (21.04.04 14:56) [53]
Я имел в виду только то, что с точки зрения структуры программы выходы

If <...> Goto -------|
         <---------|

и

try
<...>
EXIT ----------|
finally <------|

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


А теперь это:

procedure F1(Par: boolean);
begin
try
 if Par then exit;
 Windows.Beep(1000, 100);
finally;
 ShowMessage("Выход 1");
end;
 ShowMessage("Выход 2");
end;

С goto:

procedure F1(Par: boolean);
label l1;
begin
 if Par then goto l1;
 Windows.Beep(1000, 100);
 l1:ShowMessage("Выход 1");
 ShowMessage("Выход 2");
end;


 
Verg ©   (2004-04-21 15:10) [57]

Андрей Сенченко ©   (21.04.04 14:56) [53]
Я имел в виду только то, что с точки зрения структуры программы выходы

If <...> Goto -------|
         <---------|

и

try
<...>
EXIT ----------|
finally <------|

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


А теперь это:

procedure F1(Par: boolean);
begin
try
 if Par then exit;
 Windows.Beep(1000, 100);
finally;
 ShowMessage("Выход 1");
end;
 ShowMessage("Выход 2");
end;

С goto:

procedure F1(Par: boolean);
label l1;
begin
 if Par then goto l1;
 Windows.Beep(1000, 100);
 l1:ShowMessage("Выход 1");
 ShowMessage("Выход 2");
end;


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

Verg ©   (21.04.04 15:10) [57]

Вы уж меня простите, но сам по себе смысл структуры try-finally-end, если Вы его сравниваете с if-then-else предполагает наличие выхода, фактически описываемого как
IF
< в защищенном блоке все хорошо >
THEN
< пищим себе согласно кода Verg © >
ELSE GOTO FINALLY

Во втором примере Вы это ELSE сознательно опустили или просто привели некорректное сравнение ?


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

Verg ©   (21.04.04 15:10) [57]

Вы уж меня простите, но сам по себе смысл структуры try-finally-end, если Вы его сравниваете с if-then-else предполагает наличие выхода, фактически описываемого как
IF
< в защищенном блоке все хорошо >
THEN
< пищим себе согласно кода Verg © >
ELSE GOTO FINALLY

Во втором примере Вы это ELSE сознательно опустили или просто привели некорректное сравнение ?


 
Андрей Сенченко ©   (2004-04-21 15:23) [59]

Smithson ©   (21.04.04 15:07) [56]

Теперь стало понятнее. Спасибо.


 
Андрей Сенченко ©   (2004-04-21 15:23) [59]

Smithson ©   (21.04.04 15:07) [56]

Теперь стало понятнее. Спасибо.


 
Verg ©   (2004-04-21 15:29) [60]


> Андрей Сенченко ©   (21.04.04 15:21) [58]


Я уже тоже не понимаю о чем мы спорим... Ну да ладно...


> IF
> < в защищенном блоке все хорошо >
> THEN
> < пищим себе согласно кода Verg © >
> ELSE GOTO FINALLY


Ты перепиши этот кусок так, прямо на паскале.
А то непонятно, куда этот else goto finally.


 
Verg ©   (2004-04-21 15:29) [60]


> Андрей Сенченко ©   (21.04.04 15:21) [58]


Я уже тоже не понимаю о чем мы спорим... Ну да ладно...


> IF
> < в защищенном блоке все хорошо >
> THEN
> < пищим себе согласно кода Verg © >
> ELSE GOTO FINALLY


Ты перепиши этот кусок так, прямо на паскале.
А то непонятно, куда этот else goto finally.


 
WebErr ©   (2004-04-21 15:36) [61]

В общем вот что, ребята-мастерята, пишите-ка вы все на Асме, там этих goto навалом! А в Делфи можно всегда и без goto обойтись! И вообще, что такое goto и label? Никогда их не встречал ни в одном нормальном учебнике по Делфи!


 
WebErr ©   (2004-04-21 15:36) [61]

В общем вот что, ребята-мастерята, пишите-ка вы все на Асме, там этих goto навалом! А в Делфи можно всегда и без goto обойтись! И вообще, что такое goto и label? Никогда их не встречал ни в одном нормальном учебнике по Делфи!


 
Fay ©   (2004-04-21 15:52) [62]

Поищи в нормальном учебнике по Object Pascal


 
Fay ©   (2004-04-21 15:52) [62]

Поищи в нормальном учебнике по Object Pascal


 
WebErr ©   (2004-04-21 15:58) [63]


> Fay ©   (21.04.04 15:52) [62]

Это ненормальные учебники, которые учат goto!!! :))))
Слишком низкоуровневая команда для Делфи!!!


 
WebErr ©   (2004-04-21 15:58) [63]


> Fay ©   (21.04.04 15:52) [62]

Это ненормальные учебники, которые учат goto!!! :))))
Слишком низкоуровневая команда для Делфи!!!


 
Fay ©   (2004-04-21 16:01) [64]

2WebErr ©   (21.04.04 15:58) [63]

Бред


 
Fay ©   (2004-04-21 16:01) [64]

2WebErr ©   (21.04.04 15:58) [63]

Бред


 
Андрей Сенченко ©   (2004-04-21 16:05) [65]

Verg ©   (21.04.04 15:29) [60]

label lb1,lb2;

begin

 if <все хорошо>
 then goto lb1
 else goto lb2
lb1 : < пищим ! >  
 golo lb2
lb2 : <не пищим>

end;

прямо на паскале, как просили. ( мог правда ошибиться с синтаксисом - в жизни ни разу не пользовался метками начиная с 5-го паскаля )
Могу то же самое изобразить в БАТ-файле например или на бэйсике или например на скрипте кассовой программы "Профи-Т 4.0" или складской "Домино 7.4" - там то я обхожусь как-то без try-finally-end - приходится, понимаете, обходиться по причине отсутствия даже намеков на такую структуру, не жируем. Но принцип то тот же.


 
Андрей Сенченко ©   (2004-04-21 16:05) [65]

Verg ©   (21.04.04 15:29) [60]

label lb1,lb2;

begin

 if <все хорошо>
 then goto lb1
 else goto lb2
lb1 : < пищим ! >  
 golo lb2
lb2 : <не пищим>

end;

прямо на паскале, как просили. ( мог правда ошибиться с синтаксисом - в жизни ни разу не пользовался метками начиная с 5-го паскаля )
Могу то же самое изобразить в БАТ-файле например или на бэйсике или например на скрипте кассовой программы "Профи-Т 4.0" или складской "Домино 7.4" - там то я обхожусь как-то без try-finally-end - приходится, понимаете, обходиться по причине отсутствия даже намеков на такую структуру, не жируем. Но принцип то тот же.


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

эхма ... вот так безусловно

then goto lb2
else goto lb1


а то пищать не по делу будем.


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

эхма ... вот так безусловно

then goto lb2
else goto lb1


а то пищать не по делу будем.


 
WebErr ©   (2004-04-21 16:13) [67]

Паскаль:

if AllGood then
 NePisk
else
 Pisk;

Ассемблер:

cmp AllGood, 0
je label1; или jz label1 - вот он бред!
call NePisk
jmp label2
label1:
call Pisk
label2:

Нормально?! :((((
Вот они - ваши любимые "Готы" - переходите на Асм!!! :(


 
WebErr ©   (2004-04-21 16:13) [67]

Паскаль:

if AllGood then
 NePisk
else
 Pisk;

Ассемблер:

cmp AllGood, 0
je label1; или jz label1 - вот он бред!
call NePisk
jmp label2
label1:
call Pisk
label2:

Нормально?! :((((
Вот они - ваши любимые "Готы" - переходите на Асм!!! :(


 
WebErr ©   (2004-04-21 16:15) [68]

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


 
WebErr ©   (2004-04-21 16:15) [68]

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


 
Fay ©   (2004-04-21 16:16) [69]

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


 
Fay ©   (2004-04-21 16:16) [69]

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


 
Verg ©   (2004-04-21 16:18) [70]

Андрей Сенченко ©   (21.04.04 16:05) [65]

При чем тут "Пищим не Пищим".

procedure F1(Par: boolean);
begin
try
if Par then exit;        
Windows.Beep(1000, 100);  // №1
finally;
ShowMessage("Выход 1");   // №2
end;
ShowMessage("Выход 2");  // №3
end;

Ты напиши ее полный (вместе с ShowMessage) аналог, но на goto исходя из своей концепции, что exit в защищенном блоке - это все равно, что goto на участок кода в finally, но без защищенного блока.

Par = true  Выполнится только №2
par = false выполнится №1, №2, №3

Я надеюсь, что утренний диалог с Gero был прочитан?


> там то я обхожусь как-то без try-finally-end - приходится,
> понимаете, обходиться по причине отсутствия даже намеков
> на такую структуру, не жируем.


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


 
Verg ©   (2004-04-21 16:18) [70]

Андрей Сенченко ©   (21.04.04 16:05) [65]

При чем тут "Пищим не Пищим".

procedure F1(Par: boolean);
begin
try
if Par then exit;        
Windows.Beep(1000, 100);  // №1
finally;
ShowMessage("Выход 1");   // №2
end;
ShowMessage("Выход 2");  // №3
end;

Ты напиши ее полный (вместе с ShowMessage) аналог, но на goto исходя из своей концепции, что exit в защищенном блоке - это все равно, что goto на участок кода в finally, но без защищенного блока.

Par = true  Выполнится только №2
par = false выполнится №1, №2, №3

Я надеюсь, что утренний диалог с Gero был прочитан?


> там то я обхожусь как-то без try-finally-end - приходится,
> понимаете, обходиться по причине отсутствия даже намеков
> на такую структуру, не жируем.


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


 
nikkie ©   (2004-04-21 16:20) [71]

>там то я обхожусь как-то без try-finally-end
существуют еще языки, где невозможны локальные переменные - только глобальные. и ничего, обходятся люди. означает ли это, что стиль программирования с использованием этих языков стоит переносить в более развитые языки?


 
nikkie ©   (2004-04-21 16:20) [71]

>там то я обхожусь как-то без try-finally-end
существуют еще языки, где невозможны локальные переменные - только глобальные. и ничего, обходятся люди. означает ли это, что стиль программирования с использованием этих языков стоит переносить в более развитые языки?


 
Fay ©   (2004-04-21 16:23) [72]

2nikkie ©   (21.04.04 16:20) [71]
Вас не удивляет присутствие goto в таких языках?


 
Fay ©   (2004-04-21 16:23) [72]

2nikkie ©   (21.04.04 16:20) [71]
Вас не удивляет присутствие goto в таких языках?


 
nikkie ©   (2004-04-21 16:33) [73]

>Fay
>Вас не удивляет присутствие goto в таких языках?
не удивляет. но мы ведь говорим про язык Дельфи?

меня удивляет пример на Дельфи, приведенный в защиту goto в [9]. особождение захваченных ресурсов стоит помещать под try finally - это азбука. goto здесь полумера.

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


 
nikkie ©   (2004-04-21 16:33) [73]

>Fay
>Вас не удивляет присутствие goto в таких языках?
не удивляет. но мы ведь говорим про язык Дельфи?

меня удивляет пример на Дельфи, приведенный в защиту goto в [9]. особождение захваченных ресурсов стоит помещать под try finally - это азбука. goto здесь полумера.

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


 
WebErr ©   (2004-04-21 16:35) [74]


> не удивляет. но мы ведь говорим про язык Дельфи?

Делфи - это язык?


 
WebErr ©   (2004-04-21 16:35) [74]


> не удивляет. но мы ведь говорим про язык Дельфи?

Делфи - это язык?


 
nikkie ©   (2004-04-21 16:52) [75]

>Делфи - это язык?
да.


 
nikkie ©   (2004-04-21 16:52) [75]

>Делфи - это язык?
да.


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

nikkie ©   (21.04.04 16:52) [75]

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

Если описать это другими словами - то, что для моей жены "Тёмно-персиковый цвет", то для моего приятеля-дизайнера C0 M18 Y83 K0 - описать можно по-разному, суть одна.
В случае использования ( или неиспользования по религиозным причинам ) оператора GOTO Вы все-равно рано или поздно так или иначе прибегаете к безусловному переходу куда-либо. В случае , приведенном Verg © это осуществлено выходом по EXIT в секцию finally. Что при этом происходит на системном уровне ( спасибо - объяснили ) - не суть важно, если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO, а не по соображениям алгоритмического характера

Дельфи - это среда программирования безусловно.


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

nikkie ©   (21.04.04 16:52) [75]

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

Если описать это другими словами - то, что для моей жены "Тёмно-персиковый цвет", то для моего приятеля-дизайнера C0 M18 Y83 K0 - описать можно по-разному, суть одна.
В случае использования ( или неиспользования по религиозным причинам ) оператора GOTO Вы все-равно рано или поздно так или иначе прибегаете к безусловному переходу куда-либо. В случае , приведенном Verg © это осуществлено выходом по EXIT в секцию finally. Что при этом происходит на системном уровне ( спасибо - объяснили ) - не суть важно, если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO, а не по соображениям алгоритмического характера

Дельфи - это среда программирования безусловно.


 
Fay ©   (2004-04-21 17:07) [77]

2Андрей Сенченко ©   (21.04.04 17:04) [76]
Бум щетать , что енто реземю.
8)


 
Fay ©   (2004-04-21 17:07) [77]

2Андрей Сенченко ©   (21.04.04 17:04) [76]
Бум щетать , что енто реземю.
8)


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

Fay ©   (21.04.04 17:07) [77]

угу


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

Fay ©   (21.04.04 17:07) [77]

угу


 
nikkie ©   (2004-04-21 17:20) [79]

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

>если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO...
не надо фантазировать, как кто собирается использовать эту конструкцию. пример Verg-a был ответом на [9]. где, кстати, goto использовался вовсе не с целью выхода из цикла (в том примере goto не является аналогом "Exit в смысле Ада").

>Дельфи - это среда программирования безусловно.
это безусловно да. но слово безусловно нельзя заменить на слово исключительно.


 
nikkie ©   (2004-04-21 17:20) [79]

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

>если эта фича структуры Try-finally будет применена исключительно в качестве замены GOTO...
не надо фантазировать, как кто собирается использовать эту конструкцию. пример Verg-a был ответом на [9]. где, кстати, goto использовался вовсе не с целью выхода из цикла (в том примере goto не является аналогом "Exit в смысле Ада").

>Дельфи - это среда программирования безусловно.
это безусловно да. но слово безусловно нельзя заменить на слово исключительно.


 
Fay ©   (2004-04-21 17:23) [80]

2nikkie ©   (21.04.04 17:20) [79]
Если у тебя возникает желание любой ценой не использовать goto, стоит задуматься, не фигнёй ли ты занимаешься. IMHO.

>> безусловно нельзя заменить на слово исключительно
Гениально!!!


 
Fay ©   (2004-04-21 17:23) [80]

2nikkie ©   (21.04.04 17:20) [79]
Если у тебя возникает желание любой ценой не использовать goto, стоит задуматься, не фигнёй ли ты занимаешься. IMHO.

>> безусловно нельзя заменить на слово исключительно
Гениально!!!


 
nikkie ©   (2004-04-21 17:41) [81]

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

>Гениально!!!
я безусловно польщен такой оценкой своих слов, но чуется мне некий сарказм... не будете ли Вы столь любезны разъяснить мне свое мнение на тему; "Дельфи - это язык или среда?"


 
nikkie ©   (2004-04-21 17:41) [81]

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

>Гениально!!!
я безусловно польщен такой оценкой своих слов, но чуется мне некий сарказм... не будете ли Вы столь любезны разъяснить мне свое мнение на тему; "Дельфи - это язык или среда?"


 
Fay ©   (2004-04-21 17:42) [82]

>> безусловно нельзя заменить на слово исключительно
Здесь ни слова про delphi


 
Fay ©   (2004-04-21 17:42) [82]

>> безусловно нельзя заменить на слово исключительно
Здесь ни слова про delphi


 
Gero ©   (2004-04-21 17:44) [83]


nikkie ©   (21.04.04 16:52)
> >Делфи - это язык?
> да.

Только начиная с 7-ой версии. 6-ая и раньше - Object Pascal ;)


 
Gero ©   (2004-04-21 17:44) [83]


nikkie ©   (21.04.04 16:52)
> >Делфи - это язык?
> да.

Только начиная с 7-ой версии. 6-ая и раньше - Object Pascal ;)


 
Андрей Сенченко ©   (2004-04-21 17:46) [84]

кстати .. запас контрдоводов близок к исчерпанию

может это ... - пофиксено модератором ?


 
Андрей Сенченко ©   (2004-04-21 17:46) [84]

кстати .. запас контрдоводов близок к исчерпанию

может это ... - пофиксено модератором ?


 
Johnmen ©   (2004-04-21 17:47) [85]

>nikkie ©  
>а не надо обходить goto. надо писать так, чтобы он был не
>нужен. если возникает желание написать goto, стоит задуматься,
>а то ли я пишу. это мое имхо.

Каков критерий нужности ?


 
Johnmen ©   (2004-04-21 17:47) [85]

>nikkie ©  
>а не надо обходить goto. надо писать так, чтобы он был не
>нужен. если возникает желание написать goto, стоит задуматься,
>а то ли я пишу. это мое имхо.

Каков критерий нужности ?


 
Андрей Сенченко ©   (2004-04-21 18:03) [86]

Johnmen ©   (21.04.04 17:47) [85]

Если вместо нескольких часов написания обходного пути можно поставить GOTO - нужно ставить GOTO. ИМХО.

nikkie ©   (21.04.04 17:41) [81]

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


 
Андрей Сенченко ©   (2004-04-21 18:03) [86]

Johnmen ©   (21.04.04 17:47) [85]

Если вместо нескольких часов написания обходного пути можно поставить GOTO - нужно ставить GOTO. ИМХО.

nikkie ©   (21.04.04 17:41) [81]

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


 
Gero ©   (2004-04-21 18:13) [87]


> Если вместо нескольких часов написания обходного пути можно
> поставить GOTO - нужно ставить GOTO

Согласен полностью.
Но известно, чем лекарство от яда отличается...


 
Gero ©   (2004-04-21 18:13) [87]


> Если вместо нескольких часов написания обходного пути можно
> поставить GOTO - нужно ставить GOTO

Согласен полностью.
Но известно, чем лекарство от яда отличается...


 
lock95 ©   (2004-04-21 18:17) [88]

IF GOTO = это круто then есть такая команда Else ее бы не было бы


 
lock95 ©   (2004-04-21 18:17) [88]

IF GOTO = это круто then есть такая команда Else ее бы не было бы


 
Fay ©   (2004-04-21 18:21) [89]

2Андрей Сенченко ©   (21.04.04 18:03) [86]
Оченть хорошее сравнение. Спасибо! А то уменя без мата не получается... 8(


 
Fay ©   (2004-04-21 18:21) [89]

2Андрей Сенченко ©   (21.04.04 18:03) [86]
Оченть хорошее сравнение. Спасибо! А то уменя без мата не получается... 8(


 
lock95 ©   (2004-04-21 18:31) [90]

Да нет бывает легче и проще выскочить через GOTO чем геморрой городить, но на самом деле лучше не использовать


 
lock95 ©   (2004-04-21 18:31) [90]

Да нет бывает легче и проще выскочить через GOTO чем геморрой городить, но на самом деле лучше не использовать


 
Fay ©   (2004-04-21 18:40) [91]

>> но на самом деле лучше не использовать
- Чем лучше?
- Чем использовать!


 
Fay ©   (2004-04-21 18:40) [91]

>> но на самом деле лучше не использовать
- Чем лучше?
- Чем использовать!


 
lock95 ©   (2004-04-21 18:44) [92]

- Чем лучше?
- Чем использовать!


Оно конечно нежели хотя однако все таки а коль коснись чего ни будь так на тебе пожалуйста


 
lock95 ©   (2004-04-21 18:44) [92]

- Чем лучше?
- Чем использовать!


Оно конечно нежели хотя однако все таки а коль коснись чего ни будь так на тебе пожалуйста


 
nikkie ©   (2004-04-21 19:36) [93]

>Gero
>Только начиная с 7-ой версии. 6-ая и раньше - Object Pascal ;)
вопрос-то был в настоящем времени :)
никто не спрашивал, когда появился язык Дельфи
или пишу ли я на языке Дельфи
это, кстати, непростой вопрос :))

>Андрей Сенченко
>Если вместо нескольких часов написания обходного пути можно поставить GOTO - нужно ставить GOTO. ИМХО.

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

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

а других примеров почему-то никто не приводит. наверное, просто стыдно такой код в качестве примера приводить :)

>Андрей Сенченко, Fay
я пожалуй не буду продолжать эту плодотворную дискуссию на тему использования goto. впрочем, если есть желание... скажите только - сколько goto в неделю вы пишете?


 
nikkie ©   (2004-04-21 19:36) [93]

>Gero
>Только начиная с 7-ой версии. 6-ая и раньше - Object Pascal ;)
вопрос-то был в настоящем времени :)
никто не спрашивал, когда появился язык Дельфи
или пишу ли я на языке Дельфи
это, кстати, непростой вопрос :))

>Андрей Сенченко
>Если вместо нескольких часов написания обходного пути можно поставить GOTO - нужно ставить GOTO. ИМХО.

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

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

а других примеров почему-то никто не приводит. наверное, просто стыдно такой код в качестве примера приводить :)

>Андрей Сенченко, Fay
я пожалуй не буду продолжать эту плодотворную дискуссию на тему использования goto. впрочем, если есть желание... скажите только - сколько goto в неделю вы пишете?


 
Андрей Сенченко ©   (2004-04-21 19:50) [94]

nikkie ©   (21.04.04 19:36) [93]

то не буду я его пытаться переписывать, а просто поставлю goto.

Вам никогда не приходилось бывать в ситуациях вида :
( Начальник Отдела Закупок (НОЗ) vs программист (П))

НОЗ - Нам бы это .. чтобы .. ну ... эээээ
П   - Ага. Понятно, а описание хоть какое есть ?
НОЗ - Дык ты ж и сам все знаешь
П   - Знаю конечно, но что будет если (...)
НОЗ - Ну ты типа сам реши, а я подпишу
П   - ОК. А когда надо то ?
НОЗ - Да вот хотелось бы чтобы неделю назад работало ...

Не было такого ? Завидую. У меня раз в неделю.

Пытаться переписывать - оно конечно хорошо. Нужно. Правильно. Но если в приведенном примере лучше это сделать потом - оставить метку для себя и вернуться к этому уже после внедрения.

если есть желание... скажите только - сколько goto в неделю вы пишете?

Если среднепотолочно количество GOTO написанных мной за год поделить на 50 ( минус отпуск ) - то около 10 штук в неделю. Правда из них в Паскалевских и Дельфийских программах пока ни одного. За все 10 лет, что я пописываю на Паскале. Не доводилось.


 
Андрей Сенченко ©   (2004-04-21 19:50) [94]

nikkie ©   (21.04.04 19:36) [93]

то не буду я его пытаться переписывать, а просто поставлю goto.

Вам никогда не приходилось бывать в ситуациях вида :
( Начальник Отдела Закупок (НОЗ) vs программист (П))

НОЗ - Нам бы это .. чтобы .. ну ... эээээ
П   - Ага. Понятно, а описание хоть какое есть ?
НОЗ - Дык ты ж и сам все знаешь
П   - Знаю конечно, но что будет если (...)
НОЗ - Ну ты типа сам реши, а я подпишу
П   - ОК. А когда надо то ?
НОЗ - Да вот хотелось бы чтобы неделю назад работало ...

Не было такого ? Завидую. У меня раз в неделю.

Пытаться переписывать - оно конечно хорошо. Нужно. Правильно. Но если в приведенном примере лучше это сделать потом - оставить метку для себя и вернуться к этому уже после внедрения.

если есть желание... скажите только - сколько goto в неделю вы пишете?

Если среднепотолочно количество GOTO написанных мной за год поделить на 50 ( минус отпуск ) - то около 10 штук в неделю. Правда из них в Паскалевских и Дельфийских программах пока ни одного. За все 10 лет, что я пописываю на Паскале. Не доводилось.


 
Fay ©   (2004-04-21 19:51) [95]

2nikkie ©   (21.04.04 19:36) [93]
>> сколько goto в неделю вы пишете?
Не считал. В среднем, думаю, около 0.0638(6). Никто не жалуется.


 
Fay ©   (2004-04-21 19:51) [95]

2nikkie ©   (21.04.04 19:36) [93]
>> сколько goto в неделю вы пишете?
Не считал. В среднем, думаю, около 0.0638(6). Никто не жалуется.


 
Anatoly Podgoretsky ©   (2004-04-21 19:52) [96]

Андрей Сенченко ©   (21.04.04 17:46) [84]
Не ребята, решиои про GOTO то нечего на модератора тут расчитывать, сами разбирайтесь.


 
Anatoly Podgoretsky ©   (2004-04-21 19:52) [96]

Андрей Сенченко ©   (21.04.04 17:46) [84]
Не ребята, решиои про GOTO то нечего на модератора тут расчитывать, сами разбирайтесь.


 
nikkie ©   (2004-04-21 20:02) [97]

>Правда из них в Паскалевских и Дельфийских программах пока ни одного. За все 10 лет, что я пописываю на Паскале. Не доводилось.
ну вот и консенсус :)
первый goto в дельфи сработает как звоночек - 10 лет обходился без него и тут на тебе... ведь так?

>Не считал. В среднем, думаю, около 0.0638(6).
результат похуже, но тоже ничего. :) примерно 3 штуки в год
итак, если кто-то из новичков захочет найти в словах Fay поддержку своему желанию пользоваться goto - имейте в виду, что вам разрешается это делать, но не чаще 1 раза в квартал :))


 
nikkie ©   (2004-04-21 20:02) [97]

>Правда из них в Паскалевских и Дельфийских программах пока ни одного. За все 10 лет, что я пописываю на Паскале. Не доводилось.
ну вот и консенсус :)
первый goto в дельфи сработает как звоночек - 10 лет обходился без него и тут на тебе... ведь так?

>Не считал. В среднем, думаю, около 0.0638(6).
результат похуже, но тоже ничего. :) примерно 3 штуки в год
итак, если кто-то из новичков захочет найти в словах Fay поддержку своему желанию пользоваться goto - имейте в виду, что вам разрешается это делать, но не чаще 1 раза в квартал :))


 
Андрей Сенченко ©   (2004-04-21 20:06) [98]

nikkie ©   (21.04.04 20:02) [97]

Мою аналогию про забор помянем и благополучно закроем тему, а то за сотню перевалим.

Всех заборов мы еще не видели - зарекаться не будем.


 
Андрей Сенченко ©   (2004-04-21 20:06) [98]

nikkie ©   (21.04.04 20:02) [97]

Мою аналогию про забор помянем и благополучно закроем тему, а то за сотню перевалим.

Всех заборов мы еще не видели - зарекаться не будем.


 
Gero ©   (2004-04-21 20:15) [99]

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

Подводим итоги:
Не можешь без goto - используй.
Не можешь с goto - не используй.
Точка.


 
Gero ©   (2004-04-21 20:15) [99]

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

Подводим итоги:
Не можешь без goto - используй.
Не можешь с goto - не используй.
Точка.


 
Юрий Зотов ©   (2004-04-21 23:07) [100]

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

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


 
Юрий Зотов ©   (2004-04-21 23:07) [100]

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

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


 
Игорь Шевченко ©   (2004-04-21 23:16) [101]

проблема  безусловных  переходов,  к  счастью,  еще не
нашла   окончательного   решения.   Среди   программирующей
западной    молодежи    распространено   заблуждение,   что
использование оператора GOTO крайне нежелательно.  Практика
ведущих программистов  нашей  лаборатории  показывает,  что
использование оператора безусловного перехода в сочетании с
массивами  меток  повышает эффективность программ в среднем
на 4.2% при увеличении времени отладки на 350-400%.

         Если  нужно  перейти  из  данной  точки
         программы,  следует  перейти  как можно
         дальше.  Если перейти  некуда,  следует
         пересмотреть программу


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

    Все вставки  в  программу  следует  делать так:  после
последнего оператора  ставьте  новую метку,  напишите текст
вставки,   увеличьте   размерность   массива  меток  на  2,
передайте  управление  на  эту  метку  из нужной точки (или
откуда-нибудь еще),  пометьте оператор,  следующий за GOTO,
новой  меткой,  смело  измените значение переменной метки и
вернитесь.
    Вообще   говоря,  на  каком  языке  вы  бы  ни  писали
программы,  лучше,  если  каждый  оператор будет иметь свою
метку (как  это  предусмотрено  в фортране).  Степень вашей
квалификации,  как программиста  в стиле свн,  определяется
соотношением:

                        N
                      SIGMA ( V(I)+W(I) )
                       I=1
                к  =  ------------------- , где   ( 1 )
                             N

    N - число операторов,
    V(I) - число передач управления на I-тый оператор,
    W(I) - число возможных переходов от I-го оператора.

    При к < 0.5 вы,  как программист,  никуда не годитесь.
Приемлимый коэффициент 3 - 4, а некоторые суперпрограммисты
имеют к не ниже 12.

(c) Glopping


 
Игорь Шевченко ©   (2004-04-21 23:16) [101]

проблема  безусловных  переходов,  к  счастью,  еще не
нашла   окончательного   решения.   Среди   программирующей
западной    молодежи    распространено   заблуждение,   что
использование оператора GOTO крайне нежелательно.  Практика
ведущих программистов  нашей  лаборатории  показывает,  что
использование оператора безусловного перехода в сочетании с
массивами  меток  повышает эффективность программ в среднем
на 4.2% при увеличении времени отладки на 350-400%.

         Если  нужно  перейти  из  данной  точки
         программы,  следует  перейти  как можно
         дальше.  Если перейти  некуда,  следует
         пересмотреть программу


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

    Все вставки  в  программу  следует  делать так:  после
последнего оператора  ставьте  новую метку,  напишите текст
вставки,   увеличьте   размерность   массива  меток  на  2,
передайте  управление  на  эту  метку  из нужной точки (или
откуда-нибудь еще),  пометьте оператор,  следующий за GOTO,
новой  меткой,  смело  измените значение переменной метки и
вернитесь.
    Вообще   говоря,  на  каком  языке  вы  бы  ни  писали
программы,  лучше,  если  каждый  оператор будет иметь свою
метку (как  это  предусмотрено  в фортране).  Степень вашей
квалификации,  как программиста  в стиле свн,  определяется
соотношением:

                        N
                      SIGMA ( V(I)+W(I) )
                       I=1
                к  =  ------------------- , где   ( 1 )
                             N

    N - число операторов,
    V(I) - число передач управления на I-тый оператор,
    W(I) - число возможных переходов от I-го оператора.

    При к < 0.5 вы,  как программист,  никуда не годитесь.
Приемлимый коэффициент 3 - 4, а некоторые суперпрограммисты
имеют к не ниже 12.

(c) Glopping


 
Fay ©   (2004-04-22 01:07) [102]

2Игорь Шевченко ©   (21.04.04 23:16) [101]
Что это за фигня?


 
Fay ©   (2004-04-22 01:07) [102]

2Игорь Шевченко ©   (21.04.04 23:16) [101]
Что это за фигня?


 
Knight ©   (2004-04-22 01:49) [103]

У нас за такое GOTO в универе с лабораторных выставляли... и правильно делали... :)


 
Knight ©   (2004-04-22 01:49) [103]

У нас за такое GOTO в универе с лабораторных выставляли... и правильно делали... :)



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

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

Наверх




Память: 1.09 MB
Время: 0.037 c
3-1081507724
Denis_Visma
2004-04-09 14:48
2004.05.09
Выборка данных за каждый месяци сумирование


1-1082530557
denis24
2004-04-21 10:55
2004.05.09
как сделать чтобы Label визуально был сверху Stringgri на форме


9-1071126992
ZAROLF
2003-12-11 10:16
2004.05.09
Помогите с физикой в 2D аркаде !


1-1082548702
rams
2004-04-21 15:58
2004.05.09
Можно ли поменять цвет "закрашивания" ProgressBar


4-1079535051
Случайно забежавший
2004-03-17 17:50
2004.05.09
Загрузка и показ иконки





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