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.