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

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

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

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

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

Сообщение Конь » 14.01.2007 (Вс) 0:14

Хакер
О том, что GoTo портит логику, можно и поспорить. Некоторым (например, мне) глубоко положить на это. Я все равно смогу прекрасно в этом разобраться. Насчет вида кода - да, ты прав. Но опять-таки, мне иногда бывает все равно.
Подпись находится в стадии разработки...

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 14.01.2007 (Вс) 0:45

Во-первых, в вб обработка ошибок не обходится без gosub, в такой ситуации это считается использованием goto?
Если да, то ответ - иногда и только на вб6.
Если нет, то нет.

Во-вторых, я сейчас реально вижу, что многие высокоуровневые языки навязывают сложности в построении логики. Вот в них без goto сложнее, чем в нормальных. Нормальные - это perl, perl и ещё раз perl!

В-третьих, у меня в одном огромном проекте, как это не прискорбно, целых 3 goto и одна метка. Всё досканально документировано, но это как раз удобный язык (perl) и проблема в том, что было быстрее (и эффективнее на тот момент) написать goto и получить результат, чем заморачиваться.
Результат: я несколько боюсь рефакторинга этого куска кода.

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

P.S.: извиняюсь за сумбурность поста - чувства переполнили.
Я знаю верный путь

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

Сообщение Конь » 14.01.2007 (Вс) 1:48

Я тоже так считаю.
И вообще, важен не исходный код, а то что там, внутри, в бинаре :)
Подпись находится в стадии разработки...

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

Сообщение tyomitch » 14.01.2007 (Вс) 1:54

Теперь вообще никто не читает топик, прежде чем отвечать? :roll:

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

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

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

Сообщение Конь » 14.01.2007 (Вс) 1:58

Да, я это видел. Но разве один-два GoTo перепортят всю логику исходного кода? Неужели, у вас, господа программисты, логика не настолько развита? :)
Подпись находится в стадии разработки...

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

Сообщение tyomitch » 14.01.2007 (Вс) 2:19

Конь писал(а):Да, я это видел. Но разве один-два GoTo перепортят всю логику исходного кода? Неужели, у вас, господа программисты, логика не настолько развита? :)

Как будто бы дело в количестве...

И как будто бы без goto программа сразу сама собой станет простой и понятной...


Почему ни у кого не возникает желания запретить Select Case? При творческом подходе, им тоже можно сделать из программы загадку всем грядущим поколениям. Особенно в Си, где switch может пересекаться с циклами. Однако же нет, против goto ведут священную войну, а switch никому не мешает :roll: :roll:
Изображение

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

Сообщение Amed » 14.01.2007 (Вс) 4:25

Люди могут с пеной у рта годами спорить о том, что BMW лучше, чем Mercedes. Надо ли пояснять, что большинство из них ни на BMW, ни на Mercedes не то, что не ездят - а даже не ездили?

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 14.01.2007 (Вс) 4:41

Amed писал(а):Люди могут с пеной у рта годами спорить о том, что BMW лучше, чем Mercedes. Надо ли пояснять, что большинство из них ни на BMW, ни на Mercedes не то, что не ездят - а даже не ездили?

Какое это имеет отношение к goto?
Я знаю верный путь

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 14.01.2007 (Вс) 6:28

Q2W писал(а):
Amed писал(а):Люди могут с пеной у рта годами спорить о том, что BMW лучше, чем Mercedes. Надо ли пояснять, что большинство из них ни на BMW, ни на Mercedes не то, что не ездят - а даже не ездили?

Какое это имеет отношение к goto?


прямое!!! вы никогда в жизни по настоящему не использовали GOTO так, как мы, GOTOфилы! И вы не знаете как это здорово и приятно! Мы с Амедом часто играем с GOTO и никаких проблем и дискомфорта при этом не испытываем. Амед хочет сказать, что вы спорите про этот оператор, хотя ПО-НАСТОЯЩЕМУ никогда его не использовали, не наслаждались им, не чувствовали его вкуса и цвета. Только месяцы, годы, десятки лет использования GOTO позволят вам выявить его настоящею сущность, его ДАО, и позволят вам наслаждаться этим оператором в любом его применении. Он сможет открыться для вас как цветок, показать вам сущность мироздания, стоит только поверить в него, и открыть ему душу.


бугого =)
ХЎ

zan
Бывалый
Бывалый
 
Сообщения: 224
Зарегистрирован: 24.08.2006 (Чт) 4:55

Сообщение zan » 14.01.2007 (Вс) 10:25

d3drm молодца, ярко отстоялся :)

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

Сообщение Ramzes » 15.01.2007 (Пн) 10:46

Хакер
слово return тебе ни о чем не говорит? :roll:
tyomitch
Создание пользовательских объектов и их использование (это кратко).

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

Сообщение Хакер » 15.01.2007 (Пн) 12:34

Ramzes
Извини но к чему тут вообще Return ?
—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 » 15.01.2007 (Пн) 12:50

Ramzes писал(а):tyomitch
Создание пользовательских объектов и их использование (это кратко).

О, отлично!
MSIL -- ОО-язык, верно? ;-)
:lol: :lol:
Изображение

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

Сообщение Ramzes » 16.01.2007 (Вт) 12:03

Хакер
Код: Выделить всё
Public Function n()
int i,j,k,l,m
For i=0 to 100
For j=0 to 100
  For k=0 to 100
   For l=0 to 100
    For j=0 to 100
...
return some val
    Next
   Next
  Next
Next
Next
End Function

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

Сообщение Ramzes » 16.01.2007 (Вт) 12:04

tyomitch
:roll:

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

Сообщение Хакер » 16.01.2007 (Вт) 12:10

Ramzes
хе хе :)

В vb6 для возврата из функции юзается Exit Function, а возвращаемое значение присваивается одноимённой локальное переменной.

А return используется в связке с gosub.
—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 » 16.01.2007 (Вт) 12:32

Ramzes писал(а):tyomitch
:roll:

Это не ответ.
MSIL -- это ОО-язык, или нет?
Изображение

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

Сообщение Mikle » 16.01.2007 (Вт) 20:40

Для выхода из глубоких циклов я использую дополнительный цикл DO...LOOP. Если внутри цикла уже есть DO, то я его переписываю на WHILE...WEND.
Для обработки ошибок в vb6 использовать GOTO, к сожалению, приходится.
d3drm
Это прикол, или правда?
Уж что-что, опыт использования GOTO у меня есть, писал достаточно серьезные вещи еще на ATARI и Spectrum. Очень рад, что сейчас почти о нем не вспоминаю.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 16.01.2007 (Вт) 22:48

Использую GoTo в двух случаях. Выход из цикла n-ой вложености и при On Error... Остальное предпочитаю делать с помощью функций :) Ну изредка использую для перехода назад :)
#define ROFL 0xDDDD

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

Сообщение Конь » 17.01.2007 (Ср) 2:38

Делаю аналогично =)

Select тоже иногда использую, хотя чаще If...ElseIf
А GoSub на мой взгляд полный, так сказать, аццтой, сохранившийся со времен QBasic :D
Подпись находится в стадии разработки...

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 17.01.2007 (Ср) 19:03

уважаемые, напишите, какие минусы у GOTO, кроме как что он нарушает логику кода? написать, что отстой(аццтой?), особого ума не надо, причем так написать можно на счет чего угодно. Почему без аргументов?

В чем его НЕУДОБСТВА?
ХЎ

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

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

Конь писал(а):Делаю аналогично =)

Select тоже иногда использую, хотя чаще If...ElseIf
А GoSub на мой взгляд полный, так сказать, аццтой, сохранившийся со времен QBasic :D


Ты ошибаешься...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 17.01.2007 (Ср) 19:25

d3drm писал(а):уважаемые, напишите, какие минусы у GOTO, кроме как что он нарушает логику кода? написать, что отстой(аццтой?), особого ума не надо, причем так написать можно на счет чего угодно. Почему без аргументов?

В чем его НЕУДОБСТВА?


Полностью поддерживаю d3drm. А насчет того, что портит логику кода, то некоторые конструкции, которыми тут предлагалось заменить GoTo портят её еще больше.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 17.01.2007 (Ср) 20:28

Заинтересовавшись топиком я провел исследование и пришел к любопытным результатам. До этого исследования я считал, что goto плох, потому что "так принято", мол код нечитабелен. И меня не смущал тот факт, что последние несколько лет я его вижу в редчайших случаях, в основном в выходах из вложенных циклов.

С таким бекграундом я запряг гуглу запросом "goto operator is bad practice" и получил ссылку, где говорится следующее:
The GOTO statement has been the target of criticism, because if GOTOs are over-used it becomes very easy to produce unreadable and generally unmaintainable "spaghetti code".

Из этого пассажа следует, что злоупотребление GOTO сильно снижает читабельность исходника. Заинтересовавшись как можно злоупотребить этим оператором я попросил гуглу поискать страницы по запросу "goto spaghetti code". Первый же ответ дал искомый результат:
GOTO писал(а):10 i = 0
20 i = i + 1
30 if i <= 10 then goto 80
40 if i > 10 then goto 60
50 goto 20
60 print "Program Completed."
70 end
80 print i; " squared = "; i * i
90 goto 20

vs
for loop писал(а):for i = 1 to 10
print i; " squared = "; i * i
next i
print "Program Completed."


Сравните оба варианта, несомненно в первом случае код нечитабелен. А ведь это ещё простой пример, представьте себе программы в тысячи строк где нет функций, а переход осуществляется прыжками. Да, такой GOTO действительно вреден и должен быть запрещен министерством здравоохранения по причине охранения здравого смысла людей вынужденных читать этот код!

Но если внимательно присмотреться, что мы видим? Мы видим, что этот код уже лет 20 как устарел. В сегодняшних реалиях мало кто в здравом смысле, будет имитировать структуры for...next, foreach, while....loop и перемещаться произвольно по коду не используя удобные функции. Это значит то, что бойкотировать GOTO уже не актуально. По моему нескромному мнению у этого оператора существует своя ниша использования (обработка ошибок в VB6 и выход из вложенных функций), и нелепо утверждать, что он плох. Он плох когда им ошибочно пытаются заменить все остальные конструкции. Это как использовать инструмент не по назначению -- к хорошему это не приводит.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 17.01.2007 (Ср) 23:14

FaKk2, браво!

собственно вывод пока таков: GoTo портит читабельность кода, но исключительно в ситуациях его глупого использования (замена более удобных операторов).

может стоит бояться не оператора GoTo, а кудрявости собственных рук?
ХЎ

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

Сообщение tyomitch » 18.01.2007 (Чт) 0:20

Я об этом с самого начала топика и говорю, только, видимо, менее выразительно, чем FaKk2.
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 18.01.2007 (Чт) 0:27

FaKk2 писал(а):Он плох когда им ошибочно пытаются заменить все остальные конструкции.


+1 :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

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

Сообщение Mikle » 18.01.2007 (Чт) 9:51

d3drm
уважаемые, напишите, какие минусы у GOTO, кроме как что он нарушает логику кода?

Именно это и есть основной недостаток. Естественно, что если его не применять, то он ничего и не нарушит, не нужно повторять боян про "кривые руки" vs "плохой оператор". А если его применять хотя бы для выхода из цикла, то он нарушает читабельность уже тем, что метка начинается всегда от начала строки.
Но есть еще ошибки, которых не избежать, для помощи в их поиске существуют умные компиляторы, которые вовремя предупредят, что где-то есть "Select without End Select" и т. п. А при использовании GOTO в результате СЛУЧАЙНОЙ ОШИБКИ мы, например, можем перейти внутрь другого цикла, выходя из одного. Если выходить с помощью Exit Do - такого никогда не случится.

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

Сообщение tyomitch » 18.01.2007 (Чт) 23:55

tyomitch писал(а):
Ramzes писал(а):tyomitch
:roll:

Это не ответ.
MSIL -- это ОО-язык, или нет?

Мне в личке удалось убедить Ramzes-а, что MSIL -- это ОО-язык, в котором без goto не обойтись 8-)
Изображение

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

Сообщение Конь » 19.01.2007 (Пт) 10:08

Молодец! :D
Подпись находится в стадии разработки...

Пред.След.

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

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

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

    TopList  
cron