Как работает переход по метке

Обычно программа выполняет инструкции одну за другой: после текущей команды интерпретатор или процессор переходит к следующей. `GOTO` меняет этот маршрут: команда указывает метку или номер строки, с которого нужно продолжить выполнение. Это похоже на закладку в тексте, только переход может вести не вперёд, а назад — например, чтобы повторить участок кода.

Сам по себе такой переход не делает программу неправильной. Проблема возникает, когда множество переходов связывают отдалённые части кода. Тогда читателю приходится мысленно строить карту: откуда программа попала в этот участок, куда уйдёт дальше и при каких условиях. Изменение одной строки может нарушить ожидания в нескольких других местах.

Почему появились более понятные конструкции

Вместо прыжков между метками современные языки обычно предлагают циклы и условные ветвления. Цикл собирает повторяющиеся действия в одном блоке, а конструкция `if` явно показывает, какой путь выбирается при выполнении условия. Так структуру видно прямо в расположении кода: вход и выход из блока легче найти, а изменения проще проверять.

В старых языках, где программа могла состоять из пронумерованных строк, `GOTO` был простым способом управлять порядком выполнения. Но по мере роста программ цепочки переходов становились всё труднее для сопровождения. Поэтому во многих языках его использование ограничено или считается нежелательным в обычной прикладной логике. В отдельных низкоуровневых ситуациях прямой переход всё ещё может быть удобен, но он требует особенно ясной структуры.

Главная цена `GOTO` — не сам прыжок, а потеря видимой формы программы: чем больше неожиданных маршрутов, тем сложнее понять, что произойдёт после следующего изменения.