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

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

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

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

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

Сообщение Ramzes » 30.01.2007 (Вт) 11:52

tyomitch
да, удалось :) прошу прощения, что раньше не писал.

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

Сообщение Ramzes » 01.03.2007 (Чт) 11:59

Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 23.05.2007 (Ср) 14:56

Я смотрю просто: GoTO - элемент языка - ЗНАЧИТ НЕ ОШИБКА, точнее не может быть ошибкой само существование GoTo,
ошибкой может быть его ипользование в конкретной ситуации - ТОЛЬКО если это приводит к
настоящей RunTime Error, зависанию, багу\лагу\глюку (причем любой оператор или функция ошибочны, если их результат таков),
но если программа функционирует - делает то что должна - значит не ошибка!
Про "спагетти код" хочу отметить - сам на QB сделал программу
скачащую по GoTo вверх-вниз - искать ошибки и делать модификации очень затруднительно
+ спустя год я очень долго ковырялся выясняя, что же за чем же делается...
Поэтому, резюмируя пост скажу:

GoTo
А. Оправдан в исключительных ситуациях,
таких как, напрмиер выход из 2 циклов в If'е,
при том наверх, при том в позицию одного из Case в SelectCase :lol: .
Если другого способа перестроить код не видно.
Б. Оправдан в On Error -
иначе как еще на VB6 обрабатывать ошибки, а не скакать по ним Resume Next.
В. Не стоит использовать его постоянно и делать это привычкой
Г. Не стоит панически бояться.
Поэтому я считаю, что преподаватель, не имеет права называть ошибкой его использование
(если в условии задачи не стояло требование "... без GoTo"), он может назвать это либо
непрофессиональным подходом к задаче, либо пробелом в знаниях обучающегося
(например от него требовали все сделать в IF... Else ... End If, а он сотворил If ... Then Goto ...)
- но не ошибкой, так как это его личное мнение. А этот пост - мое личное мнение :roll: .
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение GSerg » 23.05.2007 (Ср) 15:05

Wolfie, какой смысл поднимать старый топик, постя в него то, что в нём давно есть?

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

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 23.05.2007 (Ср) 15:55

GSerg, смысл прост - высказаться хочется... поучавстовать в Священных Войнах :lol: есть то оно есть, но не про мою честь - я напсиал немного подругому :P
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

HKEY_SUPER_MASHINE
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 02.07.2008 (Ср) 12:17
Откуда: Тольятти, школа, случайно

Сообщение HKEY_SUPER_MASHINE » 07.07.2008 (Пн) 11:19

Без GoTo не обойтись

Частично
1. Обработка ошибок. Можно использовать сравнение обьекта Err (удобно, когда в одной процедуре в разных частях требуется разная обработка ошибок с одним и тем же номером)

2.В тех случаях, когда (по GSerg), когда без него код усложняется и разрастается, например:

Что проще?

Код: Выделить всё
Dim bytOtvet as Byte

Do While Not byt Otvet = vbYes
    bytOtvet = InputBox("Нажмите Да для продолжения")
Loop


или

Код: Выделить всё
lblNoOtvet:

If InputBox("Нажмите Да для продолжения") <> cvbYes Then GoTo lblNoOtvet


Правда экономим один байт :lol: . Но при больших проектах может вырасти до килобайта и более.
Чипсы оставляют неприятный осадок в желудке
Их состав оставляет неприятный осадок в душе

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 07.07.2008 (Пн) 19:19

А кстати. Возможно ли написание какого-нибудь дополнения, которое усовершенствовало бы допустим for.....next. Для выхода из n-цикла.
Пишите жизнь на чистовик.....переписать не удастся.....

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 07.07.2008 (Пн) 20:32

А зачем? Флаг и условие.
P. S. GoTo замедлит программу, т. к. компилер не сможет сделать оптимизацию.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.07.2008 (Вт) 9:26

Exit For?
Лучший способ понять что-то самому — объяснить это другому.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 08.07.2008 (Вт) 10:05

Antonariy
Имеется ввиду аналог конструкции
For ...
For ...
For ...
If Условие Goto label
Next
Next
Next
label:
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 08.07.2008 (Вт) 16:45

keks-n
Do
For ...
For ...
For ...
If Условие Exit Do
Next
Next
Next
Loop while false

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 08.07.2008 (Вт) 20:40

Exit For?

Я же говорю....из n-цикла

Do
For ...
For ...
For ...
If Условие Exit Do
Next
Next
Next
Loop while false

В реале это страшновато выглядит.....
Я имел в виду возможность дополнения стандартного синтаксиса VB.
Пишите жизнь на чистовик.....переписать не удастся.....

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 08.07.2008 (Вт) 22:14

Mikle
А если там внутря есть Do?
Изображение

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

Сообщение Хакер » 10.07.2008 (Чт) 1:00

Дополнить то можно, но гразная это работа... Add-in надо писать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 10.07.2008 (Чт) 22:25

Дополнить то можно, но гразная это работа... Add-in надо писать.

Почему грязная то. Я вот вообще ни разу не писал Add-in. Для меня это интересная работа. Чем она так грязна?
Пишите жизнь на чистовик.....переписать не удастся.....

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

Сообщение Хакер » 11.07.2008 (Пт) 0:28

Тем что Add-in -- это примочка к IDE, а не расширение языка. Расширить с помощью эддина язык никак нельзя документированными методами, но можно с помощью различных извращенств.

К тому же, расширяется фактически не сам язык -- создаётся только видимость его расширения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 11.07.2008 (Пт) 8:46

Вообще, что значит "расширения языка"? Язык - не браузер, зачем ему расширения? Вот есть у языка базовые конструкции и все. Зачем еще что-то, когда дальше нужно писать код уже.
То-есть, например, программист вдруг захотел такую конструкцию:
Код: Выделить всё
DoubleLine (X11, Y11)-(X12, Y12), Color1, BorderFill1, (X21, Y21)-(X22, Y22), Color2, BorderFill2

Якобы рисующую две линии с соответствующими координатами и опциями цвета, границы, заливки.
Но зачем?
Ведь он может просто написать функцию делающую то-же самое, просто все параметры будут перечислены в одних скобках.
Может я неправильно понимаю, а может неправильно выразился, а может и то и другое. Но вот.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.07.2008 (Пт) 8:52

Денис, ты неправильно понимаешь.
Lasciate ogni speranza, voi ch'entrate.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 12.07.2008 (Сб) 22:54

А ты сможешь написать функцию выхода из n-цикла например.....

К тому же, расширяется фактически не сам язык -- создаётся только видимость его расширения.

Честно почему-то не верю, что это не возможно.....Ты сам так никогда не делал? Как тогда вообще пишутся языки программирования (каламбур) и компиляторы к ним?
Пишите жизнь на чистовик.....переписать не удастся.....

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

Сообщение Хакер » 13.07.2008 (Вс) 16:12

Функцию выхода из цикла написать вообще невозможно. Концепция языка иная -- подобные вещи делаются не функциями а ключевыми словами.

"Добавить функцию в VB" я бы смог, и даже как-то хотел этим заняться.

Добавить ключевое слово слово в VB для выхода из n-ного по вложенности цикла я бы тоже смог с помощью Add-in'a, но повторяюсь: это очень долгая, нудная и грязная работа.

Потому что как бы там ни было, на самом деле перед компиляцией код всё равно будет превращаться в код с Goto. Просто эддин будет перед каждой компиляцией заменять код с кл. словом на код с гото, и наоборот, подовлять крики vb на незнакомое новое кл. слово и возможно подкрашивать его синим цветом.

Непосвящённый в суть работы Add-in'a пользователь будет думать, что ключевое слово действительно является частью языка, но на самом деле, это будет только видимость.

Честно почему-то не верю, что это не возможно.....Ты сам так никогда не делал?


Ну почти так. В моём FNDLL-2 функцию можно экспортировать кодом, без всяких там CStdDllInfo.

Как тогда вообще пишутся языки программирования (каламбур) и компиляторы к ним?

Языки программирования не пишутся вообще никак, а придумываются в головах авторов. Компиляторы к ним пишутся таким же образом, коим пишутся все остальные программами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

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

Сообщение Debugger » 26.09.2008 (Пт) 19:36

(Возможно, небольшая некрофилия.)
Удивительно - с момента моего предыдущего постинга прошел всего год - а соображения коренным образом изменились. Использовать GoTo надо всегда и везде (но не там, где неуместно) - GoTo это фишка языка, соответственно надо ее использовать.

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

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

Сообщение Viper » 27.09.2008 (Сб) 6:49

Debugger писал(а):Удивительно - с момента моего предыдущего постинга прошел всего год - а соображения коренным образом изменились. Использовать GoTo надо всегда и везде (но не там, где неуместно) - GoTo это фишка языка, соответственно надо ее использовать.
А что же тебя сподвигло на столь радикальную смену мнения?
Весь мир матрица, а мы в нем потоки байтов!

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

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

Сообщение Хакер » 27.09.2008 (Сб) 8:54

Катапультирование — это фишка истребителя. Соответственно, по твоему, её надо юзать всегда и везде?

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

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

Сообщение Viper » 27.09.2008 (Сб) 11:01

Хакер писал(а):Катапультация — это фишка истребителя. Соответственно, по теому, её надо юзать всегда и везде?
Катапультрование уж тогда! :)
Весь мир матрица, а мы в нем потоки байтов!

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

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

Сообщение Debugger » 27.09.2008 (Сб) 16:49

Конечно, надо юзать.
(но не там, где неуместно)

Но не тогда, когда врага нет :D
А что же тебя сподвигло на столь радикальную смену мнения?

Повышение уроня программирования. Оттачивание собственных схем разработки программ. Усложнение последних. В куске кода 30-40 строк в среднем будет 2-3 GoTo.

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

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

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

Пример из ста строчек кода в студию можно?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

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

Сообщение Williams » 27.09.2008 (Сб) 18:02

Debugger писал(а):
А что же тебя сподвигло на столь радикальную смену мнения?

Повышение уроня программирования. Оттачивание собственных схем разработки программ. Усложнение последних. В куске кода 30-40 строк в среднем будет 2-3 GoTo.


Жесть ))
И вы думаете, что вас оставят в живых после прочтения этого поста?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

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

Сообщение alibek » 29.09.2008 (Пн) 7:45

Debugger писал(а):Повышение уроня программирования. Оттачивание собственных схем разработки программ. Усложнение последних. В куске кода 30-40 строк в среднем будет 2-3 GoTo.

Тогда жди следующего левел-апа.
Нужды так часто использовать GoTo почти никогда не бывает.
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re:

Сообщение Mikle » 29.09.2008 (Пн) 9:10

keks-n писал(а):Mikle
А если там внутря есть Do?

Его почти всегда можно на While заменить. Я понимаю, что "внутря" может быть и While, но, что-то, я такого еще ни разу на практике не встречал.
SLIM писал(а):страшновато выглядит

Дело привычки. Для меня наоборот, Do и Loop всегда находятся на одном уровне форматирования строк, глаз их сам находит.
Вот если бы циклы можно было именовать! Все циклы, и For , и Do, и While, например:
For "boxes" x=2 to 55
...
If ... Then Exit For "boxes"
...
Next x
Естественно это информация чисто для компилятора, так что строки не добавят тормозов.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Re:

Сообщение Sebas » 29.09.2008 (Пн) 10:38

Mikle писал(а):
keks-n писал(а):Mikle
А если там внутря есть Do?

Его почти всегда можно на While заменить. Я понимаю, что "внутря" может быть и While, но, что-то, я такого еще ни разу на практике не встречал.
SLIM писал(а):страшновато выглядит

Дело привычки. Для меня наоборот, Do и Loop всегда находятся на одном уровне форматирования строк, глаз их сам находит.
Вот если бы циклы можно было именовать! Все циклы, и For , и Do, и While, например:
For "boxes" x=2 to 55
...
If ... Then Exit For "boxes"
...
Next x
Естественно это информация чисто для компилятора, так что строки не добавят тормозов.



If ... Then Exit For х
Так, наверное, правильнее)

Я, лично, упаковываю такую "карусель" в Do Loop и , соответственно, Exit Do. Либо выношу в отдельную поцедуру, соответственно Return.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Пред.След.

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

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

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

    TopList