Вход на сайт
Оператор goto в языках программирования.
NEW 31.01.12 00:04
Дорогие дамы и господа. Вас с измальства в институтах изматывали мантрой, касаемой программированием. И как религиозную догму вдалбливали, что оператором goto пользоваться ни в коем случае нельзя. Задумывались ли вы вообще над тем, что вам преподавали, или просто повторяете, но не проверяете?
Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода, увеличивает перформэнс, облегчает рефакторинг и тадэ?
Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода, увеличивает перформэнс, облегчает рефакторинг и тадэ?
NEW 31.01.12 07:30
в ответ swar0g 31.01.12 00:04
компайлер не знает оператора goto, в лучшем случае ин просто заменит его jmp , а то и вообще оптимизирует код до неузнаваемости
ну а jmp с вариациами применяется при любых операторах перехода.
ну а jmp с вариациами применяется при любых операторах перехода.
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 31.01.12 08:37
в ответ NightWatch 31.01.12 08:22
его знает препроцессор , который подменяет его , а также if, while , и т.д. адресами памяти куда следует прыгнуть.
т.к. goto при программировании обходится несколькими операторами if или break , то реальной экономии нет,
хотя учитывая, что потом компайлер делает с кодом зная методов оптимизации компайлера и не угадаешь, что нужно сделать,
чтобы сьекономить пару микросекунд
т.к. goto при программировании обходится несколькими операторами if или break , то реальной экономии нет,
хотя учитывая, что потом компайлер делает с кодом зная методов оптимизации компайлера и не угадаешь, что нужно сделать,
чтобы сьекономить пару микросекунд
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 31.01.12 09:29
в ответ gendy 31.01.12 08:37
В ответ на:
его знает препроцессор , который подменяет его , а также if, while , и т.д. адресами памяти куда следует прыгнуть.
В С/С++: Препроцессор изменяет код программы, т.е. на выходе препроцессора все та же программа на языке С/С++ с теми же if, while и т.д. if, while и т.д. заменяет компайлер на соответствующие еквиваленты в машинных командах. Вычислением адресов также занимается компайлер.его знает препроцессор , который подменяет его , а также if, while , и т.д. адресами памяти куда следует прыгнуть.
В ответ на:
т.к. goto при программировании обходится несколькими операторами if или break ,
Попробуй по условию оптимально выйти одновременно, например, из 5 вложенных циклов.т.к. goto при программировании обходится несколькими операторами if или break ,
NEW 31.01.12 10:44
Если бы нас изматывали только этим, то это были бы цветочки. Да и сейчас, какие только новые догмы и религии не пытаются вдолбить.
А что толку задумываться, если goto просто исключили из языков и все тут. Да и почему бы не повторять, если за это деньги платят. Не хочется ведь, чтобы тебя уволили.
Ну насколько я помню из детского сада, выбраться из вложенного цикла легче и понятнее по goto, чем на каждом уровне цикла доказывать, что тебе очень хочется наружу.
в ответ swar0g 31.01.12 00:04
В ответ на:
Вас с измальства в институтах изматывали мантрой, касаемой программированием. И как религиозную догму вдалбливали, что оператором goto пользоваться ни в коем случае нельзя.
Вас с измальства в институтах изматывали мантрой, касаемой программированием. И как религиозную догму вдалбливали, что оператором goto пользоваться ни в коем случае нельзя.
Если бы нас изматывали только этим, то это были бы цветочки. Да и сейчас, какие только новые догмы и религии не пытаются вдолбить.
В ответ на:
Задумывались ли вы вообще над тем, что вам преподавали, или просто повторяете, но не проверяете?
Задумывались ли вы вообще над тем, что вам преподавали, или просто повторяете, но не проверяете?
А что толку задумываться, если goto просто исключили из языков и все тут. Да и почему бы не повторять, если за это деньги платят. Не хочется ведь, чтобы тебя уволили.
В ответ на:
Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода, увеличивает перформэнс, облегчает рефакторинг и тадэ?
Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода, увеличивает перформэнс, облегчает рефакторинг и тадэ?
Ну насколько я помню из детского сада, выбраться из вложенного цикла легче и понятнее по goto, чем на каждом уровне цикла доказывать, что тебе очень хочется наружу.
NEW 31.01.12 11:01
в ответ NightWatch 31.01.12 08:21
Нет.
-----
Да. При выходе из многократно вложенных циклов дешевле иметь один GOTO, чем проверку условий на каждом уровне или ловлю исключений.
да.
-----
Нет. Пока алгоритм тот же - без разницы. Когда алгоритм другой - то для начала надо как-то извернуться с эквивалентностью разных алгоритмов...
-----
Да. При выходе из многократно вложенных циклов дешевле иметь один GOTO, чем проверку условий на каждом уровне или ловлю исключений.
да.
-----
Нет. Пока алгоритм тот же - без разницы. Когда алгоритм другой - то для начала надо как-то извернуться с эквивалентностью разных алгоритмов...
NEW 31.01.12 11:06
в ответ Murr 31.01.12 11:01
NEW 31.01.12 11:15
в ответ NightWatch 31.01.12 11:06
Спасибо - Я жую не только Бейсик, но и Фортран с его ASSIGN... причем в варианте, когда целая игровая программа - Клинги... или Убеги от людоеда... - написана единым файлом, без подпрограмм... и в Спагети-стиле.
Сути это не меняет - применение GOTO для выхода из вложенных циклов предпочтительнее других решений.
Сути это не меняет - применение GOTO для выхода из вложенных циклов предпочтительнее других решений.
NEW 31.01.12 12:42
Имхо нет. Тут целая философия и целая толпа копий на этой теме сломана. У каждого программера свое мнение. Для меня "гото" - как красная тряпка.
Я читаю рутину как рассказ. Если я вижу оператор перехода, я должен пойти куда то и посмотреть что там. Как Оффтоп
Проблема выхода из цикла решается брейками и в некоторых языках екзитами. То есть выпадение из рутины не куда-то, а на то место, откуда начал, на следующую строчку.
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
Кстати "гото" не зря из многих языков выбросили.
В ответ на:
Сути это не меняет - применение GOTO для выхода из вложенных циклов предпочтительнее других решений.
Сути это не меняет - применение GOTO для выхода из вложенных циклов предпочтительнее других решений.
Имхо нет. Тут целая философия и целая толпа копий на этой теме сломана. У каждого программера свое мнение. Для меня "гото" - как красная тряпка.
Я читаю рутину как рассказ. Если я вижу оператор перехода, я должен пойти куда то и посмотреть что там. Как Оффтоп

Проблема выхода из цикла решается брейками и в некоторых языках екзитами. То есть выпадение из рутины не куда-то, а на то место, откуда начал, на следующую строчку.
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
Кстати "гото" не зря из многих языков выбросили.
NEW 31.01.12 12:51
в ответ except 31.01.12 12:42
http://eli.thegreenplace.net/2009/04/27/using-goto-for-error-handling-in-c/
Исключения - это современный goto. Их же не выбросили? ;)
Исключения - это современный goto. Их же не выбросили? ;)
NEW 31.01.12 13:13
в ответ except 31.01.12 12:42
Проблема выхода из цикла решается брейками
------
Ну и нарисуй примерчик. Скажем, 10 (30?.. 100!?.) вложенных циклов, циклы - сложные, с пред и с пост логикой, во внутреннем - нашлось условие незамедлительного прекращения всех действий во всех циклах... Вперед...
То есть выпадение из рутины не куда-то, а на то место, откуда начал, на следующую строчку.
-----
А мне туда не надо. В самом глубоковложенном цикле Я проверил развесистое (20 строк) условие (которое Я, к слову, еще и не понимаю - его формулировал спец-предметник) и выяснил, что мне надо выйти из всех циклов... и совершенно пофиг что там в них было... Т.е. другими словами мне надо скорректировать стек на все размещенные в нем переменные и продолжить с указанного места. Переход напишу Я, а коррекцию посчитает компилятор. Напиши мне тоже самое с брейками!!!
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
-----
Увы, не понял сентенции.
------
Ну и нарисуй примерчик. Скажем, 10 (30?.. 100!?.) вложенных циклов, циклы - сложные, с пред и с пост логикой, во внутреннем - нашлось условие незамедлительного прекращения всех действий во всех циклах... Вперед...
То есть выпадение из рутины не куда-то, а на то место, откуда начал, на следующую строчку.
-----
А мне туда не надо. В самом глубоковложенном цикле Я проверил развесистое (20 строк) условие (которое Я, к слову, еще и не понимаю - его формулировал спец-предметник) и выяснил, что мне надо выйти из всех циклов... и совершенно пофиг что там в них было... Т.е. другими словами мне надо скорректировать стек на все размещенные в нем переменные и продолжить с указанного места. Переход напишу Я, а коррекцию посчитает компилятор. Напиши мне тоже самое с брейками!!!
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
-----
Увы, не понял сентенции.