ИМХО, если использоваться ГоуТу для замены циклов с проверкой условия, то тут нет вообще никакой проблемы. Также, ИМХО, для языков, типа VBA, которые работают как макросы, исполняя код в реальном времени. А проблемы начинаются в других языках программирования, когда проходит этап компиляции программы. Тогда корректно и эффективно прописать выход из какого нибудь очередного цикла наружу, не представляется возможным. И возможно при этом нарушится логика программы и будет ошибка.
Если автоматизировать бардак, то получится автоматизированный бардак.
Могу сказать, что лично я использую переходы по меткам, в первую очередь, чтобы выходить при ошибке/отмене с соответствующим сообщением. Дело в том, что, зачастую, просто невозможно предугадать заранее ВСЕ возможные косяки "пользователя" — как раз для таких случаев, лично у меня, предусмотрен вывод "экстренного" сообщения по любой ошибке. К тому же намного удобнее писать GoTo ex, чем каждый раз длинный MsgBox.Вот пример…
Код
Sub ВставитьСлеваИСправа()
Dim cl As Range
Dim iLeft$, iRight$
On Error GoTo ex
iLeft = Application.InputBox("Вставить слева:", "Введите текст", "труба до " & ChrW(216), Type:=2)
If iLeft = "False" Then GoTo ex
iRight = Application.InputBox("Вставить справа:", "Введите текст", " мм", Type:=2)
If iRight = "False" Then GoTo ex
If iLeft = "" And iRight = "" Then GoTo ex
Application.ScreenUpdating = 0:On Error GoTo er
For Each cl In Selection
If Len(cl) > 0 Then cl.Value = iLeft & cl.Value & iRight
Next cl
GoTo fin
er:MsgBox "КРИТИЧЕСКАЯ ОШИБКА!", vbCritical, "FATAL ERROR"
ex:MsgBox "Отмена выполнения…", vbInformation, "EXIT"
fin:Application.ScreenUpdating = 1
End Sub
а в целом: заставь дурака богу молиться - он себе лоб расшибёт. Любой инструмент/способ можно "испоганить" при неправильном/чрезмерном употреблении. Топик, с точки зрения обмена информацией - очень круто, а спорить о "полезности" не имеет смысла. Переход по меткам просто есть и всё
Изменено: Jack Famous - 23.09.2018 19:54:30(Убрал лишние переносы в коде и добавил замечание по удобству использования GoTo для однотипных переходов)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Go To - наследие процедурных языков программирования) Ваш КЭП Первый Бейсик с которым я имел дело, на котором учился писать что-то отдаленно похожее на программы содержал всего один вид цикла For, и два вида переходов: Go To , Go Sub. Потом был Ассемблер, где тоже всего три варианта вызова/перехода: Jp (абсолютный), Jr (относительный) и Call. Далее лет 15 забвения всех поползновений в сторону программирования. И вдруг устраиваюсь в такое замечательное место, где есть САП (с которым раньше дел не имел, и которому прямо на рабочем месте меня обучал наш сапер аж целых полчаса) ,Excel и необходимость упорядочить хаос творившийся вокруг этими подручными средствами. Ну и понеслось. Разумеется GoTo встречается в моем коде довольно часто)
Это тоже костыль. Тот же флаг, но условием... А если вложенных циклов несколько, для выхода из внутреннего условие придется ставить в каждом. Так что проще - If/If/If или один раз одним оператором? Обсуждалось это.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄