Инструкции if и case
используются для перехода к последовательности инструкций программы в зависимости
от некоторого условия. Поэтому их иногда называют инструкциями условного перехода.
Помимо этих инструкций управления ходом выполнения программы существует еще
одна — инструкция безусловного перехода goto.
В общем виде инструкция
goto записывается следующим образом:
goto Метка
где метка — это идентификатор,
находящийся перед инструкцией, которая должна быть выполнена после инструкции
goto.
Метка, используемая
в инструкции goto, должна быть объявлена в разделе меток, который начинается
словом label и располагается перед разделом объявления переменных.
В программе метка ставится
перед инструкцией, к которой должен быть выполнен переход в результате выполнения
инструкции goto. Сразу после метки ставится двоеточие.
В листинге 2.8 приведен
вариант процедуры проверки числа, в которой инструкция goto используется для
завершения процедуры в том случае, если пользователь введет неверные данные.
Листинг 2.8.
Простое число (использование инструкции goto)
procedure TForm1.Button1Click(Sender: TObject);
label //
раздел объявления меток
bye;
var
n: integer; // проверяемое число
d: integer; // делитель
r: integer; // остаток от деления п на d
begin
n:=StrToInt(Editl.text);
if
n <= 0 then begin
MessageDlg('Число
должно быть больше нуля.',
mtError, [mbOk] , 0) ; Editl.text:= ";
goto bye;
end;
// введено положительное число
d:= 2; // сначала будем делить на два
repeat
r:=
n mod d;
if
r <> 0 // n не разделилось нацело на d
then d:= d + 1;
unti1
r = 0;
label2.caption:=Editl.text;
if
d = n
then
label2.caption:=label2.caption
+
' — простое число.'
else
label2.caption:=label2.caption
+' — обычное число.';
bye:
end;
В литературе по программированию можно встретить суждения о недопустимости применения инструкции goto, поскольку она приводит к запутанности программ. Однако с категоричностью таких утверждений согласиться нельзя. В некоторых случаях применение инструкции goto вполне оправдано. Приведенный пример, где инструкция goto используется для аварийного завершения процедуры, относится именно к таким случаям.