0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 43
|
|
1 | |
За что так не любят Goto?27.01.2010, 22:54. Показов 7516. Ответов 52
Метки нет (Все метки)
Может я такой непонятливый, но объясните кто может - почему у многих не самое чучшее отношение к оператору Goto. Я этого не понимаю, в некоторых случаях (правда не часто), он вполне может пригодиться.
0
|
27.01.2010, 22:54 | |
Ответы с готовыми решениями:
52
Почему все так не любят Delphi Почему все так не любят Баскова? Почему все так не любят tkinter? Clion + cocos2d-x почему так не любят друг - друга ? (Mac OS X) |
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
28.01.2010, 10:03 | 2 |
У кого не самое лучшее, это проблемы того человека. Действительно, goto бывает нужен. Просто посмотри историю: в былые времена кроме goto ничего не было. Люди очень привыкли к goto, а потом появились составные операторы, собственно из-за того, чтобы отказаться от ненужных goto. И началась массированная атака заскорузлого сознания: де, не используйте goto. Многие люди, как, впрочем, и в обычной жизни, понимали это промывание мозгов как догму, как заповедь и стали считать, что, используя goto, грешат. Вот и все. На самом деле ничего плохого в goto нету. Только надо с умом к это му оператору подходить. В моей практике только однажды возникла ситуация, когда goto здорово сокращал и распутывал код. Только однажды. За 10 лет.
Делаем выводы )
0
|
0 / 0 / 0
Регистрация: 10.07.2007
Сообщений: 105
|
|
28.01.2010, 20:05 | 3 |
Случай в слудию! За 12 лет - ни разу не нашел веского аргумента для использования готы.
0
|
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 43
|
|
28.01.2010, 23:24 [ТС] | 4 |
Danissimo, это наподобие тех, кто всю жизнь мучился, делал в ДОС-е меню, а теперь каждому это под силу сделать за пять минут - вот и обидно им. Или люди, писавшие веб-страницы вручную теперь просто ненавидят визуальные редакторы типа FrontPage, HotMetall и др., вот и пропагандируют, что Notepad - лучший редактор ))
0
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
29.01.2010, 00:08 | 5 |
to VitFil: Так как у меня опыта не очень много, то вот пример (VB):
Do While(Условие) If Условие2 Then GoTo 111 ... Loop .... 111: .... Обойтись без GoTo можно, но как мне кажется с лишними затратами (переменные, строки кода) + понижение читаемости to Алакс: вот только страница, созданная в Notepad 'весит' гораздо меньше, чем в FrontPage. (разумеется, одинаковые по виду и содержанию) Если кто не знает, то есть еще много мест, где скорость доступа весьма мала (и за собственные денежки). Так что если наплевать на пользователя - то тогда конечно -FrontPage
0
|
1 / 1 / 1
Регистрация: 03.06.2008
Сообщений: 101
|
|
30.01.2010, 09:38 | 6 |
А кто-нибудь из вас пробовал разбирать лапшу из этих goto, написаную другими программистами?
У меня лично такой опыт имеется, до сих пор во сне кошмары снятся.
0
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
30.01.2010, 12:39 | 7 |
Ага, ясно, без GoTo лапши не получается
0
|
Ghost
|
|||||||||||
30.01.2010, 21:04 | 8 | ||||||||||
Коль пошла такая пьянка - режь последний огурец )))
Резану и я ))) Резко негативное отношение к данному оператору связано с тем, что с его помощью очень легко написать ... сверхзапутанную программу. Да, есть ситуации, когда без него - никак - обработка ошибок в VB(A), но в остальных случаях без него можео не напрягаясь обойтись. Более того, видя частое (более 1 раза на 1000 строк кода) использование GOTO я делаю вывод об общей изначальной непродуманности алгоритма. С учетом того, что 999 строк без него обходились, то и в остальных случаях тоже можно обойтись. Любителям использовать GOTO могу для прикола посоветовать заодно отказаться от ООП и процедур/функций, написать программу в 10 000+ строк и отладить её, после чего отдать на сопровождение и доработку лучшему другу. Через год встретиться лично и узнать о себе много нового. Для тех, кто не понял - вот ПРОСТЕЙШИЙ пример - не поймете - нет смысла говорить дальше:
PS. Сейчас пошерстил написанный за 10 лет код - нигде кроме ассемблера и VB(A)-обработчиков ошибок GOTO не нашел. PPS. 2 oldpasp - идиот и с помощью процедурного программирования напишет такое, что за неделю 10 строчек поймешь, а умный и с GOTO сделает читаемый код, но ... вот автоматическая коробка, (гидро)усилитель и климат контроль - что лучше - машина с этими прибамбахами или без них? Часто реально вы можете (да и нужно) выжимать из машины все, на что она способна? Если да - то вы или ошиблись форумом (Вам к автогонщикам) или ..... ну что-же - КАМАЗ вам на встречку - другие целее будут. Вроде все. |
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
31.01.2010, 00:36 | 9 |
Вот именно, что 'с его помощью очень легко написать ... сверхзапутанную программу.'
Но ведь и 'спички детям не игрушка'. Поэтому как мне кажется об уровне продуманности можно судить не только по частому использованию, но и по полному неиспользованию. Можно отнести goto к 'мощным' средствам. Бездумное использование любого мощного средства неизбежно приводит к катастрофе. Полный запрет на его использование - к лишним затратам ресурсов. to Ghost: а у меня вот знакомые водилы, так не очень-то автоматику (коробку передач) любят. Говорят на пересеченку с ней лучше не соваться. (А у нас 99% дорог - пересеченка)
0
|
Ghost
|
|
31.01.2010, 00:49 | 10 |
2 oldpasp ))) Что - не спится? )))
По поводу автоматов - пойдем на www.auto.ru? )) По своему опыту скажу - что в лоб, что по лбу. Если не застявать - то разницы нет, если застрявать - то см. мой вопрос о выжимании из машины всего. При этом даю зуб, что не умеющему раскачивать машину не опытному водителю (предлагаю определиться с терминологией - я предлагаю трактовать термин 'опытный водитель' как водителя со стажем от 600 часов (2 года езды по 1 часу в день (2 года - см. условия строховых компаний ))))), умеющего в яме раскачать автомобиль и вывести его враскачку из мокрой ямы) абсолютно все равно - на какой коробке застрять посреди поля - проще не соваться или искать трактор. По поводу 'Поэтому как мне кажется об уровне продуманности можно судить не только по частому использованию, но и по полному неиспользованию' - укажите мне пример, где бы использование GOTO РЕЗКО (подчеркиваю - резко!!!, потому, что при прочих равных из-за того, что надо глазами искать метку - уже падает читаемость) возрастает читаемость кода и я признаю Вашу правоту. При этом читаемость должна возрасти не для меня - мне-то один хрен - какой код читать, а для нормального начинающего программера. Тогда и поговорим. В случае же структкрного программирования, выделяя блоки, я явно указываю, к какому блоку что относится. Продолжим дискуссию? (по поводу автоматов и GOTO)???) |
Ghost
|
|
31.01.2010, 00:51 | 11 |
у нас 99% дорог - пересеченка - простите - Вы из каких краев? Если не секрет, конечно.
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
31.01.2010, 10:26 | 12 |
2VitFil: кода не дам -- давно было. Какой-то алгоритм: то ли сортировщик, то ли еще что-то. Вобщем, не дам -- нет его уже )
В любом случае, из всего написанного можно сделать один вывод: goto не хорош и не плох, только думать надо, его используя, впрочем, как и в любой другой ситуации ) Собсно, ничего другого ожидать и не приходилось.
0
|
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
|
|
31.01.2010, 11:45 | 13 |
А вы вспомните причину использоваия Goto, и все встанет на свои места. Ведь раньше (когда в школах учили только Basic на AT,Корветах, УКНЦ и прочей 'нечисти') в Basic не было операторных скобок (раз), процедур и функций (два), не говоря про ООП. И поэтому программы писались так :
if (условие) Then GOTO 10 ELSE GOTO 20 А по-другому и нельзя было сделать. Программить сейчас надо, все-таки соблюдая принципы структурного программирования (по-моему так это называется). А использование GOTO косвенно указывает на 'костность мышления' и, явно, на непродуманность алгоритма, да и на ленивость программера. to oldpasp: А почему нельзя ... Do While(Условие1) and (Условие2) ... или ... If Условие2 Then Exit Do 'Но так тоже нехорошо ... Спасибо, что просвятил, что goto - 'мощное средство'. PS: Да, я противник использования goto, не хочу я его использовать и все! И другим не советую. PSS: В VB только в : on error goto ...
0
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
31.01.2010, 12:50 | 14 |
* Секрет, примерно за Уралом - на Восток
* К автомобилям я вообще отношусь более чем прохладно, так что передал лишь мнение знакомых. А что, на внедорожниках и большегрузах сплошь и рядом автоматы ставят? (это для самообразования, чтоб 'блеснуть' в обчестве) * А как быть с теми, кто только начинает программировать (как я например), они-то Assembler-ом не испорчены. Кстати, область действия goto - внутри процедуры (т.е. на самом нижнем уровне 'структорного программирования' - вот здесь за слова прошу не цепляться, может это и по другому называется). (Нет, конечно, если одна процедура занимает километры, то тогда конечно, сложно метки искать) * Нет уж, померла так померла - никаких goto, в т.ч. и в OnError * На мой взгляд косность мышления - это когда 'гуру сказал так, значит так и не иначе' Условие2 появляется внутри цикла. А после окончания цикла обязательно выполнение еще некоторого кода * Пожалуйста, не жалко. Да, не пытайтесь с помощью goto создать 3d - 'мощное' - это значит независимое с большой свободой действия. ps. Этот спор (goto- не goto) один-в-один похож на спор с верующими - у них тоже 'так и никак иначе'
0
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
31.01.2010, 13:06 | 15 |
Во, позвонил 5-ти знакомым с джипами. В общем мнение единодушное - атомат для 'чайников'. Конечно, машину она (авт. коробка) сохранит от насилия, но и сильно ограничивает места, куда можно попасть, а опытный водитель насиловать машину не будет без необходимости, но попадет туда, куда надо (а не туда, куда конструкторы автомата разрешили). Еще одно мнение (портного) - самое мощное средство - обычная иголка.
Так что отказ от использования чего либо - это скорее неумение пользоваться этим.
0
|
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
|
|
31.01.2010, 14:50 | 16 |
>* А как быть с теми, кто только начинает программировать (как я например), они-то Assembler-ом не испорчены.
В Assembler'е нет goto, так же как if, for,while..., оно там все по-другому обзывается . А почему это ASM портит? Не понял... >Кстати, область действия goto - внутри процедуры ... А что goto можно прыгать между процедурами!? А я-то, и не знал! Надо попробовать обязательно! > * Нет уж, померла так померла - никаких goto, в т.ч. и в OnError Предлагаешь писать без обработки ошибок!? Очень смелый поступок, а на это я пойтить не могу. Goto сам по себе, это, разумеется, не чудовище, однако его использование, когда 'ломается' алгоритм, например, для 'прыжков' из(в) тела(о) цикла, неправильно. Я и сам иногда 'грешу' им, например: переписал процедуру, а старый код пока хочу оставить, комментировать >500 строк текста лень, прыг через него и все (при этом не нарушается логика алгоритма!). Еще, при возникновении критических ошибок, когда продолжение выполненения функции бессмысленно, можно 'прыг на конец' или Exit Sub. >Так что отказ от использования чего либо - это скорее неумение пользоваться этим В целом согласен, но что касается goto, че там уметь-то? PS: А тем, 'кто только начинает программировать' лучше сначала просто поверить, что лучше обойтись без GOTO. ...И полистать asm на досуге - очень полезное занятие. А осознание того, в каких случаях goto незаменим придет позже (на меня просветление еще не снизошло) PSS: Отвечая на вопрос, чем же GOTO плох, скажу, что его использование нарушает логику программы. Если же не нарушает, значит goto не в тему, и его спокойно можно заменить другой конструкцией.
0
|
zeus
|
|
31.01.2010, 14:51 | 17 |
Операторы Goto так не любимы потому, что программа написанная с их использованием не укладывается в древовидную структуру. Программу с использованием операторов Goto вообще тежело как-то формально структуризовать, следовательно код такой программы тяжело сопровождать и документировать.
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
31.01.2010, 16:01 | 18 |
to t-80: . Не надо стараться казаться умнее всех. (вариант - дурнее, чем есть на самом деле). Думаю Вы прекрасно поняли, о чем речь. Перед тем, как ответить, прочитайте дискуссию еще раз. (а может и несколько) - чтобы не воспринимать желаемое за действительное.
0
|
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
|
|
31.01.2010, 16:22 | 19 |
???
Кстати, не поленился, попробовал goto из одной проц-ры в другую - не прокатило (ну естественно!).
0
|
0 / 0 / 1
Регистрация: 15.12.2007
Сообщений: 381
|
|
31.01.2010, 16:43 | 20 |
Господа! А Вам рекурсия нравится!?
Хорошая вешь, но ведь и без нее можно обойтись. А в древовидную структуру ее ложить стека не хватит Как на меня (коль уж такой флейм пошел), то GoTo имеет право на жизнь Например вот типичный пример Код
M1: Do While (Bollean) ... If (Boolean) Then GoTo M1 ... If (Boolean) Then Exit Do ... Loop Код
Do While True Do While (Boolean) ... If (Boolean) Then ... Exit Do End If ... Loop If (Boolean) Then Exit Do Loop Но если GoTo ставится примерно в таких случаях: Код
Sub MySuperSub(A as Boolean) If not A Then Goto M1: ... 'Дохрена кода и мне просто влом тащить End If M1: MsgBox 'Я сдесь был! Пиво пил!' End Sub
0
|
31.01.2010, 16:43 | |
31.01.2010, 16:43 | |
Помогаю со студенческими работами здесь
20
Почему партнерские программы и поисковики так не любят сайты о заработке в инете? Что любят поисковики? Переделать фрагмент кода так, чтобы использовался оператор goto Превращение кода с goto в код без goto Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |