0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 43
|
|
За что так не любят Goto?27.01.2010, 22:54. Показов 7583. Ответов 52
Метки нет Все метки)
(
Может я такой непонятливый, но объясните кто может - почему у многих не самое чучшее отношение к оператору Goto. Я этого не понимаю, в некоторых случаях (правда не часто), он вполне может пригодиться.
0
|
27.01.2010, 22:54 | |
Ответы с готовыми решениями:
52
Почему все так не любят Delphi Почему все так не любят Баскова? Почему все так не любят tkinter? |
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
28.01.2010, 10:03 | |
У кого не самое лучшее, это проблемы того человека. Действительно, goto бывает нужен. Просто посмотри историю: в былые времена кроме goto ничего не было. Люди очень привыкли к goto, а потом появились составные операторы, собственно из-за того, чтобы отказаться от ненужных goto. И началась массированная атака заскорузлого сознания: де, не используйте goto. Многие люди, как, впрочем, и в обычной жизни, понимали это промывание мозгов как догму, как заповедь и стали считать, что, используя goto, грешат. Вот и все. На самом деле ничего плохого в goto нету. Только надо с умом к это му оператору подходить. В моей практике только однажды возникла ситуация, когда goto здорово сокращал и распутывал код. Только однажды. За 10 лет.
Делаем выводы ![]()
0
|
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 43
|
|
28.01.2010, 23:24 [ТС] | |
Danissimo, это наподобие тех, кто всю жизнь мучился, делал в ДОС-е меню, а теперь каждому это под силу сделать за пять минут - вот и обидно им. Или люди, писавшие веб-страницы вручную теперь просто ненавидят визуальные редакторы типа FrontPage, HotMetall и др., вот и пропагандируют, что Notepad - лучший редактор
![]()
0
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
29.01.2010, 00:08 | |
to VitFil: Так как у меня опыта не очень много, то вот пример (VB):
Do While(Условие) If Условие2 Then GoTo 111 ... Loop .... 111: .... Обойтись без GoTo можно, но как мне кажется с лишними затратами (переменные, строки кода) + понижение читаемости to Алакс: вот только страница, созданная в Notepad 'весит' гораздо меньше, чем в FrontPage. (разумеется, одинаковые по виду и содержанию) Если кто не знает, то есть еще много мест, где скорость доступа весьма мала (и за собственные денежки). Так что если наплевать на пользователя - то тогда конечно -FrontPage
0
|
Ghost
|
|||||||||||
30.01.2010, 21:04 | |||||||||||
Коль пошла такая пьянка - режь последний огурец )))
Резану и я ))) Резко негативное отношение к данному оператору связано с тем, что с его помощью очень легко написать ... сверхзапутанную программу. Да, есть ситуации, когда без него - никак - обработка ошибок в 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 | |
Вот именно, что 'с его помощью очень легко написать ... сверхзапутанную программу.'
Но ведь и 'спички детям не игрушка'. Поэтому как мне кажется об уровне продуманности можно судить не только по частому использованию, но и по полному неиспользованию. Можно отнести goto к 'мощным' средствам. Бездумное использование любого мощного средства неизбежно приводит к катастрофе. Полный запрет на его использование - к лишним затратам ресурсов. to Ghost: а у меня вот знакомые водилы, так не очень-то автоматику (коробку передач) любят. Говорят на пересеченку с ней лучше не соваться. (А у нас 99% дорог - пересеченка)
0
|
Ghost
|
|
31.01.2010, 00:49 | |
2 oldpasp ))) Что - не спится? )))
По поводу автоматов - пойдем на www.auto.ru? ![]() По поводу 'Поэтому как мне кажется об уровне продуманности можно судить не только по частому использованию, но и по полному неиспользованию' - укажите мне пример, где бы использование GOTO РЕЗКО (подчеркиваю - резко!!!, потому, что при прочих равных из-за того, что надо глазами искать метку - уже падает читаемость) возрастает читаемость кода и я признаю Вашу правоту. При этом читаемость должна возрасти не для меня - мне-то один хрен - какой код читать, а для нормального начинающего программера. Тогда и поговорим. В случае же структкрного программирования, выделяя блоки, я явно указываю, к какому блоку что относится. Продолжим дискуссию? (по поводу автоматов и GOTO)???) |
Ghost
|
|
31.01.2010, 00:51 | |
у нас 99% дорог - пересеченка - простите - Вы из каких краев? Если не секрет, конечно.
|
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
|
|
31.01.2010, 10:26 | |
2VitFil: кода не дам -- давно было. Какой-то алгоритм: то ли сортировщик, то ли еще что-то. Вобщем, не дам -- нет его уже
![]() В любом случае, из всего написанного можно сделать один вывод: goto не хорош и не плох, только думать надо, его используя, впрочем, как и в любой другой ситуации ![]()
0
|
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
|
|
31.01.2010, 11:45 | |
А вы вспомните причину использоваия 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 | |
* Секрет, примерно за Уралом - на Восток
* К автомобилям я вообще отношусь более чем прохладно, так что передал лишь мнение знакомых. А что, на внедорожниках и большегрузах сплошь и рядом автоматы ставят? (это для самообразования, чтоб 'блеснуть' в обчестве) * А как быть с теми, кто только начинает программировать (как я например), они-то Assembler-ом не испорчены. Кстати, область действия goto - внутри процедуры (т.е. на самом нижнем уровне 'структорного программирования' - вот здесь за слова прошу не цепляться, может это и по другому называется). (Нет, конечно, если одна процедура занимает километры, то тогда конечно, сложно метки искать) * Нет уж, померла так померла - никаких goto, в т.ч. и в OnError * На мой взгляд косность мышления - это когда 'гуру сказал так, значит так и не иначе' Условие2 появляется внутри цикла. А после окончания цикла обязательно выполнение еще некоторого кода * Пожалуйста, не жалко. Да, не пытайтесь с помощью goto создать 3d - 'мощное' - это значит независимое с большой свободой действия. ps. Этот спор (goto- не goto) один-в-один похож на спор с верующими - у них тоже 'так и никак иначе'
0
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
31.01.2010, 13:06 | |
Во, позвонил 5-ти знакомым с джипами. В общем мнение единодушное - атомат для 'чайников'. Конечно, машину она (авт. коробка) сохранит от насилия, но и сильно ограничивает места, куда можно попасть, а опытный водитель насиловать машину не будет без необходимости, но попадет туда, куда надо (а не туда, куда конструкторы автомата разрешили). Еще одно мнение (портного) - самое мощное средство - обычная иголка.
Так что отказ от использования чего либо - это скорее неумение пользоваться этим.
0
|
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
|
|
31.01.2010, 14:50 | |
>* А как быть с теми, кто только начинает программировать (как я например), они-то 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 | |
Операторы Goto так не любимы потому, что программа написанная с их использованием не укладывается в древовидную структуру. Программу с использованием операторов Goto вообще тежело как-то формально структуризовать, следовательно код такой программы тяжело сопровождать и документировать.
|
2 / 2 / 2
Регистрация: 23.06.2007
Сообщений: 399
|
|
31.01.2010, 16:01 | |
to t-80:
![]()
0
|
0 / 0 / 1
Регистрация: 15.12.2007
Сообщений: 381
|
||||||||||||||||
31.01.2010, 16:43 | ||||||||||||||||
Господа! А Вам рекурсия нравится!?
Хорошая вешь, но ведь и без нее можно обойтись. А в древовидную структуру ее ложить стека не хватит ![]() Как на меня (коль уж такой флейм пошел), то GoTo имеет право на жизнь Например вот типичный пример
Но если GoTo ставится примерно в таких случаях:
0
|
31.01.2010, 16:43 | ||||||
Помогаю со студенческими работами здесь
20
Почему партнерские программы и поисковики так не любят сайты о заработке в инете? Что любят поисковики? Переделать фрагмент кода так, чтобы использовался оператор goto
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Как использовать Behavior Graph в Unity при создании игрового AI
GameUnited 14.04.2025
Искусственный интеллект в играх прошел долгий путь эволюции. От простейших алгоритмов, движущих призраками в Pac-Man, до сложных систем, управляющих поведением персонажей в современных AAA-проектах. . . .
|
Создание и стилизация списков в SwiftUI
mobDevWorks 14.04.2025
Списки — фундаментальный элемент мобильных интерфейсов. От списка контактов до ленты новостей, от настроек до каталога товаров — трудно представить приложение, которое не использовало бы этот. . .
|
Паттерн SAGA и распределённые транзакции в микросервисной архитектуре
stackOverflow 14.04.2025
Переход от монолитной архитектуры к микросервисам принес множество преимуществ: гибкость разработки, независимость развертывания и масштабирования отдельных компонентов. Однако этот переход создал и. . .
|
Кастомные аллокаторы в C++ и оптимизация управления памятью
bytestream 14.04.2025
Работа с памятью в С++ всегда была и остаётся одной из самых увлекательных и сложных задач для программиста. Любой опытный C++ разработчик подтвердит: стандартные механизмы аллокации памяти – штука. . .
|
Организация сетей в Kubernetes и эффективное развертывание
Mr. Docker 14.04.2025
Сетевая инфраструктура Kubernetes представляет собой сложную, но хорошо спроектированную систему, которая позволяет контейнерам взаимодействовать между собой и с внешним миром. За кажущейся простотой. . .
|
Многопоточность в Rust: Fearless concurrency и практические примеры
golander 14.04.2025
Многопоточное программирование связано с рядом известных проблем. Наиболее распространенные из них — гонки данных (data races), взаимные блокировки (deadlocks) и условия гонки (race conditions). Эти. . .
|
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
|
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
|
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
|
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
|