GoTo

Szczawik

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 <font color="green">"Go To statement considered harmful"</span> (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.

0 komentarzy