Programowanie w języku Delphi

GoTo

  • 2012-06-15 14:58
  • 0 komentarzy
  • 2907 odsłon
  • Oceń ten tekst jako pierwszy
GoTo - konstrukcja

Instrukcja GoTo powoduje bezwarunkowy skok do instrukcji oznaczonej etykietą.

Użycie:
label 
  etykieta;
 
begin
  //... 
  GoTo etykieta:
  //instrukcje pomijane
  etykieta:
  //...
end;


Przykład działania:
program Przyklad;
 
{$APPTYPE CONSOLE}
 
label 
  etykieta;
 
begin
  WriteLn('Instrukcja poczatkowa'); //Wykonane
  GoTo etykieta;
  WriteLn('Ominieta instrukcja');   //Nie wykonane
  etykieta:
  WriteLn('Instrukcja koncowa');    //Wykonane
end.


Użycie instrukcji GoTo jest współcześnie niezalecane. Wywodzi się ona z programowania niskopoziomowego. Po opublikowanych przez Edsgera Dijkstrę esejach i referatach "Go To statement considered harmful" (1968), wokół tej konstrukcji zostało sformułowanych wiele mitów. Naukowiec zdecydowanie odradzał używanie GoTo, gdyż - przede wszystkim - zatraca sens logiki programu, która w językach wysokiego poziomu jest tworzona poprzez użycie konkretnych instrukcji i składni, a przede wszystkim może przyczyniać się do powstawania trudnych w interpretacji i czasem nieprzewidywalnych w działaniu konstrukcji programu (na przykład skok do wewnątrz ciała pętli for bez początkowego ustawienia zmiennych iteracyjnych - na co języki wysokiego poziomu nie pozwalają).

Przy ewentualnym użyciu zalecana jest pełna świadomość potencjalnych zagrożeń i konsekwencji.

Potencjalnym przykładem wykorzystania może być przerwanie wykonywania kilku zagnieżdżonych pętli jednocześnie:
procedure WyskokZPetli(zmienna: integer);
var 
  X, Y, Z: Integer;
label 
  wynik;
begin
  for X := 1 to 100 do
    for Y := 1 to 100 do
      for Z := 1 to 100 do
        if (zmienna = X + Y + Z) then
          goto wynik;
  WriteLn('Nie znaleziono!'); 
  Exit;
  wynik:
  WriteLn('Znaleziono!');
end;


Nie jest możliwe użycie GoTo w celu wskoczenia lub wyskoczenia z bloków try...except lub try...finally.