forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   GOTO (http://forum.boolean.name/showthread.php?t=8161)

Slepetc 08.04.2009 00:07

GOTO
 
Здравствуйте, такая ситуация. Мы с одним знакомым регулярно спорим, насчёт того, является ли использование GОTО признаком безграмотного програмиста. Речь идёт не просто о его наличии в программе, а даже использовании его, вместо цикла:
Код:

1:
;код
goto 1

А в некоторых его ранних программах я встречал даже такую конструкцию:
Код:

openfile(...)
on error goto 2
1:
readline(...)
goto 1
2:
Closefile(...)

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

Tadeus 08.04.2009 00:08

Ответ: GOTO
 
http://forum.boolean.name/showthread.php?t=26

Slepetc 08.04.2009 00:31

Ответ: GOTO
 
Цитата:

Сообщение от Tadeus (Сообщение 103111)

Мне скорее нужно высказывание грамотного народа, чем информация, ведь я не сам задаюсь вопросом, а пытаюсь доказать, человеку.

ABTOMAT 08.04.2009 00:34

Ответ: GOTO
 
Это к Ымперу

SBJoker 08.04.2009 00:49

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

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

С технической стороны goto и заменяющие конструкции это прыжки по памяти.

HolyDel 08.04.2009 01:09

Ответ: GOTO
 
ничего против goto не имею. если переход осуществляется в пределах экрана (10-20 строчек от вызова до метки), то думаю ничего страшного нет.

G.A.D 08.04.2009 01:23

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

Phantom 08.04.2009 01:42

Ответ: GOTO
 
Цитата:

а ак известно скачки по памяти замедляют программу на доли секунду(милисекунду)
Наоборот. Быстрее будет перескочить, чем выполнять несколько условий, которые приведут к тому же результату, но без GOTO. Это как я понял из темы Импера про GOTO =)

impersonalis 08.04.2009 02:23

Ответ: GOTO
 
Если вы не можете чётко мотивровать: чем это в вашем коде ГоТо оправданнее высокоуровневых методов ветвления алгоритма - значит от его использования пока стоит отказаться. Есть ряд задач (и языков!) где ГоТо оправдано, мне из чувства сосбвтенной гордости и надменности, кажется, что это - не тот случай.

Randomize 08.04.2009 15:41

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

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

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

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

Так вот код программы для того, кто её разрабатывает.
Я на GOTO собаку ещё на спектруме сьел.
И этот оператор считаю отголоском древности, чтоб старики, которые без него не могут сильно не плакали.

impersonalis 08.04.2009 19:02

Ответ: GOTO
 
ГоТо прост и быстр как молотком по голове - раньше (на спектурме) и теперь в некторых быдло-местах (разнообразные ассемблеры и их языки) тоже встречается, но большиство цивилизованных людей использует дипломатию в той или инйо степени.

zheland 23.04.2009 20:28

Ответ: GOTO
 
Цитата:

Сообщение от G.A.D (Сообщение 103117)
как 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 не всегда нужно.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot