Когда-то, когда макросы были страшные, "GO-TO!!!" звучало как глас из Мордора, макросописцев считал чародеями ), оператор обсуждался то ли в отдельной теме, то ли параллельно с другим вопросом...
Противники, готовьте помидоры (все равно не долетят, разобьются о личное_мнение).
Цитата из темы основного форума:
... и относятся они в большей степени к языкам более высокого уровня.
Догмы - они тоже вредны бывают. Тем, у кого "Windows маздай", "GoTo отстой", "Наша Галя круче всех" и проч., без рассуждений и доводов, лучше проходить мимо. Принимается только трезвый взгляд на жизнь (под небольшим градусом тоже допускается ).
Негатив от безусловного перехода какой? Правильно, нарушается структура, можно потерять нить... Но! Справедливо это для больших процедур, длинных листингов. В макросах, в которых в видимой части экрана наблюдаем и выход, и строку перехода, большой беды от GoTo нет. Или в кодах, где заведомо известно, куда нас понесет (например, к выходу из процедуры).
Второй минус использования безусловного перехода - человек привыкает его использовать. А это может быть большим препятствием для работы с более продвинутыми язуками (не уверен, только логический вывод из собственных размышлений)
Бесспорно, выходить из одиночного цикла лучше по Exit For.
Кстати, прямо при написании возникла интересная мысль: Exit For по факту - тот же же безусловный переход, но четко привязанный к месту применения и к строке перехода. Из той же песочницы прочие Exit'ы. Получается, что все они - операторы безусловного перехода!
И книжки пишут, и опытные товарищи советуют вложенные циклы применять по минимуму - медленно работают. Но не всегда (даже очень часто) не получается следовать этому правилу. Выходить наружу из внутреннего цикла можно по флагу, но это дополнительная проверка (если три цикла - две проверки). Гораздо удобнее сказать: а пошел бы ты на GoTo
Сам не сторонник применения GoTo, но и отказываться от него в VBA не стоит. Это как с летучими функциями листа: если есть замена не хуже, то всякие СМЕЩ, ДВССЫЛ применять не нужно. Но ведь есть случаи, когда без них не обойтись или замена будет хуже.
Использую безусловный переход в двух случаях (больше с ходу не вспомнил):
1. В начале процедуры для выхода из нее при проверках . Т.е. всегда понятно, что GoTo - это завершение и переход следует искать недалеко от End Sub.Да и зачем искать, если понятно? Нет, не замена Exit Sub.
Например, нужно открыть другой файл. Отключаем сообщения, обновление экрана, открываем книгу... и тут проверки на наличие листа, корректность данных, поиск таблицы и проч. Просто Exit Sub не получится - нужно включить отключенное. Наставить каскад If - код разрастается и становится менее читабельным. GoTo здорово помогает.
2. В этих самых циклах. Здесь использую очень редко. Тоже применяю флаги или разделение циклов. Но иногда бывает. Если точка перехода - вот она, рядом, и любой другой пользователь увидит ее без напряга. А еще комментарий подвесить и имя понятное дать...
Ага, вспомнил еще одну "штучку" - обработчик ошибок (вообще, его бы тоже пореже задействовать). Куда-то же люди переходят: On Error GoTo.... И это советует кто? Разработчик! (если бы не советовал, придумал бы другой флаг).
Так что книги читать очень полезно, но и думать не запрещается )
Противники, готовьте помидоры (все равно не долетят, разобьются о личное_мнение).
Цитата из темы основного форума:
Цитата |
---|
Irregular Expression написал: существуют тонны написанных книг о вреде GoTo |
Догмы - они тоже вредны бывают. Тем, у кого "Windows маздай", "GoTo отстой", "Наша Галя круче всех" и проч., без рассуждений и доводов, лучше проходить мимо. Принимается только трезвый взгляд на жизнь (под небольшим градусом тоже допускается ).
Негатив от безусловного перехода какой? Правильно, нарушается структура, можно потерять нить... Но! Справедливо это для больших процедур, длинных листингов. В макросах, в которых в видимой части экрана наблюдаем и выход, и строку перехода, большой беды от GoTo нет. Или в кодах, где заведомо известно, куда нас понесет (например, к выходу из процедуры).
Второй минус использования безусловного перехода - человек привыкает его использовать. А это может быть большим препятствием для работы с более продвинутыми язуками (не уверен, только логический вывод из собственных размышлений)
Бесспорно, выходить из одиночного цикла лучше по Exit For.
Кстати, прямо при написании возникла интересная мысль: Exit For по факту - тот же же безусловный переход, но четко привязанный к месту применения и к строке перехода. Из той же песочницы прочие Exit'ы. Получается, что все они - операторы безусловного перехода!
И книжки пишут, и опытные товарищи советуют вложенные циклы применять по минимуму - медленно работают. Но не всегда (даже очень часто) не получается следовать этому правилу. Выходить наружу из внутреннего цикла можно по флагу, но это дополнительная проверка (если три цикла - две проверки). Гораздо удобнее сказать: а пошел бы ты на GoTo
Сам не сторонник применения GoTo, но и отказываться от него в VBA не стоит. Это как с летучими функциями листа: если есть замена не хуже, то всякие СМЕЩ, ДВССЫЛ применять не нужно. Но ведь есть случаи, когда без них не обойтись или замена будет хуже.
Использую безусловный переход в двух случаях (больше с ходу не вспомнил):
1. В начале процедуры для выхода из нее при проверках . Т.е. всегда понятно, что GoTo - это завершение и переход следует искать недалеко от End Sub.Да и зачем искать, если понятно? Нет, не замена Exit Sub.
Например, нужно открыть другой файл. Отключаем сообщения, обновление экрана, открываем книгу... и тут проверки на наличие листа, корректность данных, поиск таблицы и проч. Просто Exit Sub не получится - нужно включить отключенное. Наставить каскад If - код разрастается и становится менее читабельным. GoTo здорово помогает.
2. В этих самых циклах. Здесь использую очень редко. Тоже применяю флаги или разделение циклов. Но иногда бывает. Если точка перехода - вот она, рядом, и любой другой пользователь увидит ее без напряга. А еще комментарий подвесить и имя понятное дать...
Ага, вспомнил еще одну "штучку" - обработчик ошибок (вообще, его бы тоже пореже задействовать). Куда-то же люди переходят: On Error GoTo.... И это советует кто? Разработчик! (если бы не советовал, придумал бы другой флаг).
Так что книги читать очень полезно, но и думать не запрещается )