Deutsch
Germany.ruФорумы → Архив Досок→ Курилка

Оператор goto в языках программирования.

1443  1 2 3 4 все
swar0g постоялец31.01.12 00:04
swar0g
NEW 31.01.12 00:04 
Дорогие дамы и господа. Вас с измальства в институтах изматывали мантрой, касаемой программированием. И как религиозную догму вдалбливали, что оператором goto пользоваться ни в коем случае нельзя. Задумывались ли вы вообще над тем, что вам преподавали, или просто повторяете, но не проверяете?
Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода, увеличивает перформэнс, облегчает рефакторинг и тадэ?
#1 
Murr патриот31.01.12 00:19
Murr
31.01.12 00:19 
в ответ swar0g 31.01.12 00:04
упрощает читаемость кода,
-----
Да
увеличивает перформэнс,
-----
Нет
облегчает рефакторинг
-----
Нет
#2 
gendy Dinosaur31.01.12 07:30
gendy
NEW 31.01.12 07:30 
в ответ swar0g 31.01.12 00:04
компайлер не знает оператора goto, в лучшем случае ин просто заменит его jmp , а то и вообще оптимизирует код до неузнаваемости
ну а jmp с вариациами применяется при любых операторах перехода.

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#3 
NightWatch коренной житель31.01.12 08:21
NightWatch
NEW 31.01.12 08:21 
в ответ Murr 31.01.12 00:19
В ответ на:
упрощает читаемость кода,
Нет.
В ответ на:
увеличивает перформэнс,
При правильном применении да.
#4 
NightWatch коренной житель31.01.12 08:22
NightWatch
NEW 31.01.12 08:22 
в ответ gendy 31.01.12 07:30
Компайлер его то как раз знает.
#5 
gendy Dinosaur31.01.12 08:37
gendy
NEW 31.01.12 08:37 
в ответ NightWatch 31.01.12 08:22
его знает препроцессор , который подменяет его , а также if, while , и т.д. адресами памяти куда следует прыгнуть.
т.к. goto при программировании обходится несколькими операторами if или break , то реальной экономии нет,
хотя учитывая, что потом компайлер делает с кодом зная методов оптимизации компайлера и не угадаешь, что нужно сделать,
чтобы сьекономить пару микросекунд

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#6 
Simple Nothing is f*cked31.01.12 08:57
Simple
NEW 31.01.12 08:57 
в ответ gendy 31.01.12 08:37
О том, что делает компилятор, нужно думать, если не хватает производительности. Правило 80/20. // Ваш К.О.
#7 
Simple Nothing is f*cked31.01.12 08:57
Simple
NEW 31.01.12 08:57 
в ответ swar0g 31.01.12 00:04
В ОО-языках можно и нужно обходиться без него, а в С он может быть весьма полезен.
#8 
NightWatch коренной житель31.01.12 09:29
NightWatch
NEW 31.01.12 09:29 
в ответ gendy 31.01.12 08:37
В ответ на:
его знает препроцессор , который подменяет его , а также if, while , и т.д. адресами памяти куда следует прыгнуть.
В С/С++: Препроцессор изменяет код программы, т.е. на выходе препроцессора все та же программа на языке С/С++ с теми же if, while и т.д. if, while и т.д. заменяет компайлер на соответствующие еквиваленты в машинных командах. Вычислением адресов также занимается компайлер.
В ответ на:
т.к. goto при программировании обходится несколькими операторами if или break ,
Попробуй по условию оптимально выйти одновременно, например, из 5 вложенных циклов.
#9 
  svnv постоялец31.01.12 10:44
NEW 31.01.12 10:44 
в ответ swar0g 31.01.12 00:04
В ответ на:
Вас с измальства в институтах изматывали мантрой, касаемой программированием. И как религиозную догму вдалбливали, что оператором goto пользоваться ни в коем случае нельзя.

Если бы нас изматывали только этим, то это были бы цветочки. Да и сейчас, какие только новые догмы и религии не пытаются вдолбить.
В ответ на:
Задумывались ли вы вообще над тем, что вам преподавали, или просто повторяете, но не проверяете?

А что толку задумываться, если goto просто исключили из языков и все тут. Да и почему бы не повторять, если за это деньги платят. Не хочется ведь, чтобы тебя уволили.
В ответ на:
Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода, увеличивает перформэнс, облегчает рефакторинг и тадэ?

Ну насколько я помню из детского сада, выбраться из вложенного цикла легче и понятнее по goto, чем на каждом уровне цикла доказывать, что тебе очень хочется наружу.
#10 
Murr патриот31.01.12 11:01
Murr
NEW 31.01.12 11:01 
в ответ NightWatch 31.01.12 08:21
Нет.
-----
Да. При выходе из многократно вложенных циклов дешевле иметь один GOTO, чем проверку условий на каждом уровне или ловлю исключений.
да.
-----
Нет. Пока алгоритм тот же - без разницы. Когда алгоритм другой - то для начала надо как-то извернуться с эквивалентностью разных алгоритмов...
#11 
Murr патриот31.01.12 11:04
Murr
NEW 31.01.12 11:04 
в ответ gendy 31.01.12 08:37
т.к. goto при программировании обходится несколькими операторами if или break
-----
Эээ... нее, сегодня я тебя не понимаю... какая-то инверсная логика...
#12 
NightWatch коренной житель31.01.12 11:06
NightWatch
Murr патриот31.01.12 11:15
Murr
NEW 31.01.12 11:15 
в ответ NightWatch 31.01.12 11:06
Спасибо - Я жую не только Бейсик, но и Фортран с его ASSIGN... причем в варианте, когда целая игровая программа - Клинги... или Убеги от людоеда... - написана единым файлом, без подпрограмм... и в Спагети-стиле.
Сути это не меняет - применение GOTO для выхода из вложенных циклов предпочтительнее других решений.
#14 
NightWatch коренной житель31.01.12 11:19
NightWatch
NEW 31.01.12 11:19 
в ответ Murr 31.01.12 11:15
Ну, если бы GOTO применялся исключительно для етого, ты был бы прав.
#15 
Murr патриот31.01.12 11:45
Murr
NEW 31.01.12 11:45 
в ответ NightWatch 31.01.12 11:19
Напомню, что вопрос был:
В ответ на:

Есть ли жизненные ситуации, где использование этого оператора упрощает читаемость кода

Ответ - ДА.
#16 
NightWatch коренной житель31.01.12 11:47
NightWatch
NEW 31.01.12 11:47 
в ответ Murr 31.01.12 11:45
Фиг с тобой, убедил.
#17 
  except постоялец31.01.12 12:42
NEW 31.01.12 12:42 
в ответ Murr 31.01.12 11:15, Последний раз изменено 31.01.12 12:43 (except)
В ответ на:
Сути это не меняет - применение GOTO для выхода из вложенных циклов предпочтительнее других решений.

Имхо нет. Тут целая философия и целая толпа копий на этой теме сломана. У каждого программера свое мнение. Для меня "гото" - как красная тряпка.
Я читаю рутину как рассказ. Если я вижу оператор перехода, я должен пойти куда то и посмотреть что там. Как Оффтоп
Проблема выхода из цикла решается брейками и в некоторых языках екзитами. То есть выпадение из рутины не куда-то, а на то место, откуда начал, на следующую строчку.
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
Кстати "гото" не зря из многих языков выбросили.
#18 
Simple Nothing is f*cked31.01.12 12:51
Simple
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. Их же не выбросили? ;)
#19 
Murr патриот31.01.12 13:13
Murr
NEW 31.01.12 13:13 
в ответ except 31.01.12 12:42
Проблема выхода из цикла решается брейками
------
Ну и нарисуй примерчик. Скажем, 10 (30?.. 100!?.) вложенных циклов, циклы - сложные, с пред и с пост логикой, во внутреннем - нашлось условие незамедлительного прекращения всех действий во всех циклах... Вперед...
То есть выпадение из рутины не куда-то, а на то место, откуда начал, на следующую строчку.
-----
А мне туда не надо. В самом глубоковложенном цикле Я проверил развесистое (20 строк) условие (которое Я, к слову, еще и не понимаю - его формулировал спец-предметник) и выяснил, что мне надо выйти из всех циклов... и совершенно пофиг что там в них было... Т.е. другими словами мне надо скорректировать стек на все размещенные в нем переменные и продолжить с указанного места. Переход напишу Я, а коррекцию посчитает компилятор. Напиши мне тоже самое с брейками!!!
Операторы перехода удобны для себя любимого, когда код абсолютно известен и не надо ничего раскапывать.
-----
Увы, не понял сентенции.
#20 
1 2 3 4 все