Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 08.04.2009, 00:07   #1
Slepetc
Нуждающийся
 
Аватар для Slepetc
 
Регистрация: 05.07.2008
Сообщений: 53
Написано 6 полезных сообщений
(для 7 пользователей)
GOTO

Здравствуйте, такая ситуация. Мы с одним знакомым регулярно спорим, насчёт того, является ли использование GОTО признаком безграмотного програмиста. Речь идёт не просто о его наличии в программе, а даже использовании его, вместо цикла:
1:
;код
goto 1
А в некоторых его ранних программах я встречал даже такую конструкцию:
openfile(...)
on error goto 2
1:
readline(...)
goto 1
2:
Closefile(...)
вроде того, короче смысл ясен. Сам он придерживается мысли, что GoTo является слишком читерским методом, поэтому его и отправили в немилость.
Просьба такая, можете здесь доходчиво объяснить, почему нельзя использовать GoTo, желательно приводя технические, а не только моральные причины.
__________________
...
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 00:08   #2
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Ответ: GOTO

http://forum.boolean.name/showthread.php?t=26
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Tadeus за это полезное сообщение:
impersonalis (08.04.2009), Phantom (08.04.2009)
Старый 08.04.2009, 00:31   #3
Slepetc
Нуждающийся
 
Аватар для Slepetc
 
Регистрация: 05.07.2008
Сообщений: 53
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: GOTO

Сообщение от Tadeus Посмотреть сообщение
Мне скорее нужно высказывание грамотного народа, чем информация, ведь я не сам задаюсь вопросом, а пытаюсь доказать, человеку.
__________________
...
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 00:34   #4
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: GOTO

Это к Ымперу
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (08.04.2009)
Старый 08.04.2009, 00:49   #5
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: GOTO

всё что реализуется с помощью goto легко реализуется конструкциями языка типа if-then, for-next, switch, select и т.д.

Однако использование goto делает код менее читабельным.

С технической стороны goto и заменяющие конструкции это прыжки по памяти.
__________________
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 01:09   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: GOTO

ничего против goto не имею. если переход осуществляется в пределах экрана (10-20 строчек от вызова до метки), то думаю ничего страшного нет.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tormoz (08.04.2009)
Старый 08.04.2009, 01:23   #7
G.A.D
Разработчик
 
Регистрация: 28.02.2009
Сообщений: 434
Написано 44 полезных сообщений
(для 96 пользователей)
Ответ: GOTO

как SBJOker написал это скачок по памяти
а ак известно скачки по памяти замедляют программу на доли секунду(милисекунду)=>если программа и так лагает то лучше воздержаться от ГОТО,а если нормально и надо обработать от 5 до 15(-20,(кол-во строк зависит:смотря какие команды и используете ли вы функции свои) строк,то можно спокойно ставить.Опять же если намудрёные свои функции то лучше воздержаться от ГОТО
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 01:42   #8
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: GOTO

а ак известно скачки по памяти замедляют программу на доли секунду(милисекунду)
Наоборот. Быстрее будет перескочить, чем выполнять несколько условий, которые приведут к тому же результату, но без GOTO. Это как я понял из темы Импера про GOTO =)
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 02:23   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: GOTO

Если вы не можете чётко мотивровать: чем это в вашем коде ГоТо оправданнее высокоуровневых методов ветвления алгоритма - значит от его использования пока стоит отказаться. Есть ряд задач (и языков!) где ГоТо оправдано, мне из чувства сосбвтенной гордости и надменности, кажется, что это - не тот случай.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 15:41   #10
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: GOTO

Вопросы к любителям GOTO:
1) Ребята, а каким макаром можно без потерь выйти из GOTO цикла?
ещё одни Goto? Потрясающе!

2) Сравните Function Превед() и Превед: разработчик обращает внимение на Function, а потом на Превед

3) Неужели GoSub заменяет Function. Слабовероятно. Тогда зачем функции придумали?

4) Внутри классов в BlitzMax вместо кучи методов использовать один метод main() и в нём куча GoTo/GoSUB?

Так вот код программы для того, кто её разрабатывает.
Я на GOTO собаку ещё на спектруме сьел.
И этот оператор считаю отголоском древности, чтоб старики, которые без него не могут сильно не плакали.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 08.04.2009, 19:02   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: GOTO

ГоТо прост и быстр как молотком по голове - раньше (на спектурме) и теперь в некторых быдло-местах (разнообразные ассемблеры и их языки) тоже встречается, но большиство цивилизованных людей использует дипломатию в той или инйо степени.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tormoz (23.04.2009)
Старый 23.04.2009, 20:28   #12
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Ответ: GOTO

Сообщение от G.A.D Посмотреть сообщение
как SBJOker написал это скачок по памяти
а ак известно скачки по памяти замедляют программу на доли секунду(милисекунду)=>если программа и так лагает то лучше воздержаться от ГОТО,а если нормально и надо обработать от 5 до 15(-20,(кол-во строк зависит:смотря какие команды и используете ли вы функции свои) строк,то можно спокойно ставить.Опять же если намудрёные свои функции то лучше воздержаться от ГОТО
Разберём примерно что получает процессор при условии и цикле

if [...1]
[...2]
end if
Заменяется на:
сравнить значения [...1]
если равно(+не больше, +не меньше,...
(условия инвертируются при компиляции)) goto _endif
[...2]
_endif:

for a = ? to ? step ?
[...2]
next
Заменяется на:
a=?
b=?
c=?
_for:
[...2]
a=a+c
сравнить значения a и b, если меньше перейти на _for

Так-что и функции, и методы, и условия, и циклы,
это не только скачки, но и дополнительные операции процессора.

Но я согласен что goto не всегда нужно.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tormoz (23.04.2009)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Об использовании Goto impersonalis FAQ 29 07.01.2006 23:33


Часовой пояс GMT +4, время: 12:07.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com