Использование GOTO

Windows лучше чем Linux! Чем? Ясно же написано — чем Linux!
Раздуй свой холивар сегодня, потому что завтра это может сделать уже кто-то другой!

Cчитаете ли вы оправданым использование goto?

Да
23
29%
Иногда, в исключительных ситуациях
40
51%
Нет
13
17%
Свой вариант
2
3%
 
Всего голосов : 78

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Использование GOTO

Сообщение GM » 09.01.2007 (Вт) 2:31

Недавно был случай, один мой одногрупник, не смог сдать лабараторную из-за использование goto(в этом случае он использовал для выхода из трех циклов) Препод указал на это как на серьезную ошибку и сказал переделать на условные выражения.

Так к чему это: считаете ли вы оправданым использование goto?

Например в VB я использую goto для обработки ошибок, замена оператора continue, и для выхода из множества цикла.
الفيجوال بيسك الرابح

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.01.2007 (Вт) 2:50

GoTo в On Error я ещё допускаю.

Оператора Continue я не знаю. Слушай, а какой это оператор, правоассоциативный или лево- ? Нет, в С конечно есть такое, но это не оператор а ключевое слово.

Голосовал за второе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 09.01.2007 (Вт) 4:19

У нас препод говорил, что-то про GoTo и сказал, что это грубая ошибка, что она нарушает архитектуру программы.

Чес слово, я понял его (т.к. он пока обьясняет для юзверей), но как использовал GoTo так и использую!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Использование GOTO

Сообщение GSerg » 09.01.2007 (Вт) 7:28

GM писал(а):Недавно был случай, один мой одногрупник, не смог сдать лабараторную из-за использование goto(в этом случае он использовал для выхода из трех циклов) Препод указал на это как на серьезную ошибку и сказал переделать на условные выражения.

Препод дятел. Суровый, сибирский.

GM писал(а):Так к чему это: считаете ли вы оправданым использование goto?

Несомненно. Для обработки ошибок, выхода из многоуровневого цикла, эмулирования отсутствующих конструкций языка, перехода на общую завершающую часть сложной процедуры из многих её мест, а также в случаях, когда логические конструкции без goto оказываются в разы сложнее и непонятнее, чем с ним (да, бывает и такое. См., например, "Совершенный код" за авторством Стива МакКоннела).

Преподу для прекращения бытия дятлом срочно читать классику в лице http://www.rsdn.ru/forum/Message.aspx?mid=57977&pg=1
Если не осилит, пусть прочитает только первый пост, второй и последний (спасибо, Amed).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.01.2007 (Вт) 8:40

Стараюсь обходится без GoTo, за исключением ситуаций с обработкой ошибок, где без GoTo не обойтись. Во всех иных ситуациях стараюсь избегать, однако отсутствие continue например и ситуации типа выхода из многоуровненвого цикла заставляют таки использовать GoTo. Посему, GoTo вполне имеет право на существование.

Насчет дятельности препода, использование GoTo конечно не явлется грубой ошибкой, но вот вопрос, а в какой ситуации это было сказано?
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 8:52

!Viper! писал(а):Насчет дятельности препода, использование GoTo конечно не явлется грубой ошибкой, но вот вопрос, а в какой ситуации это было сказано?


GM писал(а):в этом случае он использовал для выхода из трех циклов
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.01.2007 (Вт) 8:55

Разные преподы бывают.
Наш не только goto, но и repeat-until считал катастрофической ошибкой. Можно было только while-do.
И он был не дятел, а разработчик какой-то суперпродвинутой методики преподавания информатики, по которой чем меньше операторов человек знает, тем лучше.
Не буду отстаивать его точку зрения, хотя считаю её вполне последовательной и обоснованной.
Я верю, что программист, как ребёнок в анекдоте про голландцев, "когда вырастет -- само решит", как ему писать. И что это исключительно дело личного вкуса.
Если ему не лень стирать и писать заново уже однажды написанный и отлаженный код только из-за того, что он не может вспомнить, как он работал, -- пусть использует хоть goto, хоть ассемблерные вставки, хоть баги компилятора.
Изображение

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 09.01.2007 (Вт) 15:54

Если вы проходили прерывание циклов, то логично, что использование GOTO - серьезная ошибка. Вобщем-то часто в программе (обучения) есть шаблон от которого шаг влево - шаг вправо - расстрел. Причем он очевиден.

Многоуровневые циклы как правило все же не глубже трех. Иначе стоит подумть о том, чтоб обойтись без этого. Ну по крайней мере мне так кажется. Хотя ничего против GoTo не имею. Вобщем-то в QB вообще ничего кроме GoTo и If не использовал...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 17:18

GAGArin писал(а):Если вы проходили прерывание циклов, то логично, что использование GOTO - серьезная ошибка.

Почему?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 12.01.2007 (Пт) 18:49

чем меньше операторов человек знает, тем лучше.
Все дружно учим BrainF*ck :)

По теме: а можно ли в АСМе без GOTO? :wink: Вообще, все это фигня, ибо юзает чел GOTO или нет, а компилятор его генерит. Так что толку заморачиваться?
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.01.2007 (Пт) 19:23

Twister писал(а):Вообще, все это фигня, ибо юзает чел GOTO или нет, а компилятор его генерит. Так что толку заморачиваться?

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

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 12.01.2007 (Пт) 19:29

в ООП НЕДОПУСТИМО!!!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.01.2007 (Пт) 19:39

Какая связь между объектностью и goto?
И какая аргументация, кроме трёх восклицательных знаков?
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.01.2007 (Пт) 19:47

tyomitch, зажатый Caps...

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 13.01.2007 (Сб) 1:46

Кстати нашел интересную статью о GOTO http://david.tribble.com/text/goto.html
الفيجوال بيسك الرابح

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 13.01.2007 (Сб) 11:14

Ну ведь для чего-то GoTo придумали, правда? Следовательно, это не может считаться ошибкой!
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.01.2007 (Сб) 11:18

Маты тоже придумали чтобы материться. Однако то что ты материшься тебя не красит. Верно?

Почти также в случае с программой.

GoTo портит логику (логику чтения программистом) и вид кода. Но есть всё таки случаи когда без GoTo либо никак, либо как, но уж никак не лучше чем с Goto :) . Поэтому, опять же говорю, голосовал за вариант "да, только в случаех когда это действительно требуется".
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 13.01.2007 (Сб) 13:21

tyomitch
Зачем использовать Goto если есть методы, которые можно вызывать в случае ошибки?
Goto можно использовать в qBasic, там это приемлемо, потому, что нужно как-то ходить в разные куски программы, а в ООП это решаеться другим путем.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.01.2007 (Сб) 14:08

Ramzes, я ещё с прошлого раза помню, что у тебя всё программирование делится на ООП и QBasic; не нужно лишний раз демонстрировать свой кругозор ;-)


В последний раз, когда я использовал goto, это было для глубокого выхода из цикла. Сначала я бросал исключение, но в той проге для облегчения отладки все first-chance исключения сбрасываются в лог, и моё исключение забивало остальным логи ненужной ерундой. (См. тж. http://blogs.msdn.com/ericlippert/archi ... 74117.aspx о вреде исключений в неисключительных ситуациях.)
Изображение

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 13.01.2007 (Сб) 14:17

Использовать осторожно, очень осторожно. Для выхода из цикла или ещё чего можно, а для "перемещения по коду и остановки программы на полсекунды" не годится. Цикциклится.
Последний раз редактировалось Debugger 13.01.2007 (Сб) 19:15, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.01.2007 (Сб) 14:27

Debugger писал(а):}{ /\/\., как говориться. Использовать осторожно, очень осторожно. Для выхода из цикла или ещё чего можно, а для "перемещения по коду и остановки программы на полсекунды" не годится. Цикциклится.


Не цикциклись пожалуста. А то сначало какие-то скобкои и слэши пишешь. Потом о какой-то осторожности говоришь. Зачем осторожность? не знаю я. Есть вещи которые куда опаснее чем GoTo. Тот же CallWindowProc используемый не так. Так что goto по сравнению с ними вообще ангел.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 13.01.2007 (Сб) 14:55

tyomitch
Меня вполне устраивает ООП.
Лучше приведи мне пример, когда в ООП нельзя обойтись без GOTO. Ведь в своем первом посте в этом топике я говорил что использование GOTO именно в ООП неприемлимо, и считаеться плохим тоном. Можешь доказать обратное?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.01.2007 (Сб) 14:59

Если язык программирования является ООП-языком, но в нём не предусмотрен выход из цикла n-ной вложенности, но есть GoTo то как прикажешь поступать?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 13.01.2007 (Сб) 15:04

Хакер
а что это за язык такой? И конкретнее задачу поставь, тогда можно по месту смотреть :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.01.2007 (Сб) 15:17

Пусть это будет VB6. Ты конечно же начнёшь возражать, что это не ООП язык, потому что ты повёрнут на .NET и ничего больше не признаёшь. :)

Но для этого мы условно (мысленно) расширим VB6 и придадим ему всю необходимую ООПность.

Задача: Выйти из цикла 5-ой вложенности.

Ы?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.01.2007 (Сб) 15:23

Ramzes писал(а):Меня вполне устраивает ООП.

Если в твоём понимании, ООП -- это всё, что не QBasic, тогда бесспорно ;-)

Ramzes писал(а):Лучше приведи мне пример, когда в ООП нельзя обойтись без GOTO.

В моём предыдущем посте.

Ramzes писал(а):Ведь в своем первом посте в этом топике я говорил что использование GOTO именно в ООП неприемлимо

Сначала расскажи, наконец, что конкретно ты считаешь ООП. И как объектность связана с приемлимостью или неприемлипостью goto. (В прошлый раз ты в ООП записал и шаблоны, и коллекции ;-))

Ramzes писал(а):и считаеться плохим тоном.

Кем? лично тобой? На удовольствие.
Изображение

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 13.01.2007 (Сб) 19:29

Хакер писал(а):Но для этого мы условно (мысленно) расширим VB6 и придадим ему всю необходимую ООПность.
Задача: Выйти из цикла 5-ой вложенности.
Ы?

Ramzes имееть ввиду, создание блока try...catch, в начале циклов и в конце, и там где нужно выйти из циклов, просто вызвать исключение throw.
الفيجوال بيسك الرابح

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.01.2007 (Сб) 19:36

Я выше писал про исключения в неисключительных ситуациях.
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.01.2007 (Сб) 19:37

GM
Разве ООП-язык предполагает наличие возможности обработки исключений.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 13.01.2007 (Сб) 20:18

Хакер, вопрос не ко мне.
Я бы лично воспользовался goto.
الفيجوال بيسك الرابح

След.

Вернуться в Holy Wars@VBStreets

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList