Оператор выполняет безусловный адресный переход к другой строке программы
Синтаксис
Оператор Перейти
имеет следующий синтаксис:
Перейти ~ИдентификаторМетки; //операторы ~ИдентификаторМетки: //операторы
А также альтернативный англоязычный синтаксис:
Goto ~Label; //operators ~Label: //operators
Описание
Оператор Перейти
используется для немедленного безусловного перехода к оператору программы, расположенному на другой строке. Для этого целевая строка отмечается специальным символьным идентификатором — меткой. Метка может располагаться как до оператора Перейти
(в этом случае будет осуществлен переход назад), так и после него (будет осуществлен переход вперед).
Связанные друг с другом оператор перехода и метка должны располагаться в одном программном модуле. Если оператор используется в теле процедуры или функции, то и метка должна располагаться в теле этой же процедуры или функции.
На использование оператора Перейти
накладываются жесткие ограничения:
- оператор нельзя использовать для перехода к метке, объявленной за пределами программного модуля. При нарушении этого ограничения синтаксический анализатор выдаст ошибку: «Метка не определена (имя метки)»;
- оператор нельзя использовать для перехода к метке, объявленной за пределами процедуры или функции. При нарушении этого ограничения синтаксический анализатор выдаст ошибку: «Метка не определена в процедуре (имя метки)»;
- оператор нельзя использовать для перехода извне к метке, объявленной внутри условных или управляющих операторов, а также оператора управления исключениями. При нарушении этого ограничения синтаксический анализатор выдаст ошибку: «На метку с указанным именем имеется недопустимый переход (имя метки)»;
Эти ограничения связаны с тем, что неумелое использование данного оператора может привести к появлению трудно обнаруживаемых ошибок. Но оператор Перейти
можно и нужно использовать в особых случаях, например, для досрочного прекращения цикла.
Пример использования
Пример кода с использованием оператора Перейти
//поиск значения в таблице Для НомерСтроки = 1 По Таб.ВысотаТаблицы() Цикл Для НомерКолонки = 1 По Таб.ШиринаТаблицы() Цикл Если Таб.Область(НомерСтроки, НомерКолонки).Текст = СокрЛП(СтрокаДляПоиска) Тогда Предупреждение(Шаблон("Значение найдено R[НомерСтроки]C[НомерКолонки]"), 5); Перейти ~Выход; КонецЕсли; КонецЦикла; КонецЦикла; Предупреждение("Значение не найдено!", 5); ~Выход: