Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/67: Рейтинг темы: голосов - 67, средняя оценка - 4.90
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647

Оператор GOTO: за и против

20.11.2011, 16:38. Показов 15017. Ответов 146
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди, по ходу, газет не читают:
Оператор GOTO в языках высокого уровня является объектом критики, поскольку чрезмерное его применение приводит к созданию нечитаемого «спагетти-кода». Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Доводы против оператора GOTO», который заметил, что качество программного кода обратно пропорционально количеству операторов GOTO в нём. Статья приобрела широкую известность как среди теоретиков, так и среди практиков программирования, в результате чего взгляды на использование оператора GOTO были существенно пересмотрены. В своей следующей работе Дейкстра обосновал тот факт, что для кода без GOTO намного легче проверить формальную корректность.

Код с GOTO трудно форматировать, так как он может нарушать иерархичность выполнения (то есть парадигму структурного программирования), и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. GOTO также аннулирует многие возможности компилятора по оптимизации управляющих структур

Доводы против оператора GOTO оказались столь серьёзны, что в структурном программировании его стали рассматривать как крайне нежелательный

Начало тут
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2011, 16:38
Ответы с готовыми решениями:

Оператор GOTO и его метки
Здесь я хотел раз и навсегда разобраться с метками оператора GOTO. 1) Если метка является идентификатором, то есть начинается с...

Goto - за и против
С удивлением обнаружил на форуме аж двух сторонников оператора goto. Посему объявляю опрос.

Оператор goto
Здравствуйте. Я в лабораторной работе проверяю введенные данные на различные ошибки. Я это все сделал, каждую ошибку мне выдает. То...

146
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 16:49
GOTO это отличный оператор, не одна серьёзная программа без него не обходится.
В защиту GOTO могу сказать, что лишь правильная работа с переходами на низком уровне увеличивает проиводительность программ.
Когда программа структурирована насколько это возможно, применение переходов становится даже более чем желательным, т.к. сложность дальнейшего рефакторинга вкупе с оптимизацией после реструктуризации программы(что может плохо сказаться на производительности и увеличить кол-во ошибок) насолько велика, что проще и надёжнее поставить переход, нежели заниматься бестолковой трудоёмкой работой.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
20.11.2011, 16:51  [ТС]
Ну да, Дейкстра, он, конечно, в программировании не смыслит, как и остальные 99% программистов, отказавшихся от GOTO
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 16:54
Код с GOTO трудно форматировать
Кому как.
поскольку чрезмерное его применение приводит к созданию нечитаемого «спагетти-кода»
В программе выше не было черезмерного применения.

Добавлено через 51 секунду
как и остальные 99% программистов
За себя говорим, а не за других людей, люди не дети малые - придут и скажут за себя сами.

Добавлено через 1 минуту
кот Бегемот, мы уже об этом говорили, не стоит специально флеймить.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
20.11.2011, 17:07  [ТС]

Не по теме:

>Quiet Snow<, вы очень неплохо пишете программы, но не надо мнить себя центром Вселенной. Ваши взгляды на программирование безнадёжно устарели, и Ваша попытка реанимировать GOTO похожа на езду по скоростной трассе на Запорожце среди иномарок. Это факт и с этим надо смириться, независимо от того, что Запорожец лично Вам рчень нравится



Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Кому как.

В программе выше не было черезмерного применения.

Добавлено через 51 секунду

За себя говорим, а не за других людей, люди не дети малые - придут и скажут за себя сами.

Добавлено через 1 минуту
кот Бегемот, мы уже об этом говорили, не стоит специально флеймить.
Объясняйте это мировому сообществу программистов во главе с Дейкстра, а не мне. Заодно поищите хоть какую-нибудь серьёзную современную программу, написанную не Вами, где есть GOTO для иллюстрации вашего постулата "не одна серьёзная программа без него не обходится". Это тоже "за себя говорим, а не за других", потому как это голословно.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 17:13
но не надо мнить себя центром Вселенной.
Я агрументирую свои доводы. Правильное использование переходов, залог эффективной и безошибочной работы любой сложной и объёмной программы, а на низком уровне позволяет добиваться феноменальной производительности, хотите узнать как - читайте книжки. Не хотите - ваше право.
Мне не важно кто и как матетатически что-то там доказал, да можно структурировать программу без переходов, но кто этим будет пользоваться без автоматических средств реструктуризации. Ответ очевиден. Всё больше спорить не хочу, надоело, пишите тут что пожелаете, ваше право, нормальные программисты знают что к чему им демагогии на форумах не нужны у них большие и сложные проги, а не детский юмор...

Добавлено через 3 минуты
Заодно поищите хоть какую-нибудь серьёзную современную программу
На асме их валом)))

Заодно поищите хоть какую-нибудь серьёзную современную программу, написанную не Вами
Я бы нашёл вашу но боюсь её нет...
0
20.11.2011, 17:13  [ТС]

Не по теме:

Я тоже спорить больше не хочу, но программу с GOTO всё же хотелось бы увидеть, заяц ведь трепаться не любит? Или любит?

0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
20.11.2011, 17:39  [ТС]
Надо нести ответственность за базар, иначе каждый начнёт писать всякую хрень, выдавая это за истину.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 18:05
но программу с GOTO всё же хотелось бы увидеть
Исходники Quake2 почитайте, что, несерьёзная прога? А ну да выж их пачками пишете я забыл)))

Добавлено через 14 минут

Не по теме:

Памирыч, с сообщением всё впорядке, твоя личка блокирована потому пишу тут.



Добавлено через 9 минут
Это тоже "за себя говорим, а не за других", потому как это голословно.
Я говорю со своей точки зрения, на основе опыта, как я вижу данный вопрос, а не за других людей. Это 2 разные вещи, прикрываться другими без их согласия и говорить за себя(т.е. выражать свои мысли).
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
20.11.2011, 18:20  [ТС]
Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Исходники Quake2 почитайте, что, несерьёзная прога? А ну да выж их пачками пишете я забыл)))
Quake II — компьютерная игра в жанре шутер от первого лица, вышедшая 9 декабря 1997 года.
1. Вы всерьёз считаете, что за 14 лет в программировании прогресса не было?
2. не надо посылать что-то где-то искать. утверждаете - доказывайте здесь.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 18:30
Вы всерьёз считаете, что за 14 лет в программировании прогресса не было?
Сможете достать исходники какой либо современной проги? Допустим Starcraft 2? Флаг в руки, но я уверен, что и там будут переходы, они ещё долго будут, их никто не решится убрать из языков, это важнейшая конструкция, впрочем вам этого не понять...

утверждаете - доказывайте здесь.
Они общедоступны, вы попросили я ответил, я вам вообще не обязан чего то доказывать, не мальчик на побегушках, это вы тут пытаетесь свои доводы толкнуть, не доказав...
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.11.2011, 18:57
Извините, что вмешиваюсь в ваш благородный спор, но нельзя ли уточнить, о каком языке программирования идет речь? Судя по ветке это QBasic, но тогда при чем тут исходники Quake2? Если о ЯП вообще, то спор вообще некорректный, т.к. каждый ЯП заточен под свои операторы, и в некоторых такого оператора вообще нет( FORTH), а в иных просто нет другого механизма и без GOTO не обойтись. К стати, интересный факт о Н.Вирте :
В Паскаль GOTO первоначально включён не был, но недостаточность имеющихся языковых средств вынудила Никлауса Вирта его добавить.
Опять же GOTO присутствует также во всех языках ассемблера в форме JMP, JUMP и используется там чрезвычайно активно, вот тут уже точно без него не обойтись.
Хотя в остальных современных ЯП я легко обхожусь без него, включая и различные Бейсики.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
20.11.2011, 19:20  [ТС]
Pro_grammer, речь, прежде всего, идёт о бейсике. Но вот товарищ утверждает, что ВСЕ серьёзные программы обязательно не обходятся без этого оператора.
Мне сложно судить о тех языках, которые я не знаю, но в паскале, хоть и есть GOTO, я ни разу не видел, чтобы им кто-то пользовался, поскольку и в паскале, и в бейсике хватает простых конструкций, позволяющих обойтись без GOTO, хотя бы DO...LOOP, а в паскале WHILE DO. При изучении бейсика нормальные преподы обязательно предупреждают: использование GOTO - дурной стиль программирования, затрудняющий чтение программы и не дающий возможность её структурировать.
Но у >Quiet Snow< своё личное мнение. Я ему сочувствую.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 19:28
Извините, что вмешиваюсь в ваш благородный спор.
Чем больше мнений тем лучше.

о каком языке программирования идет речь?
Ну раз разговор про GOTO, то скорее о тех, в которых он есть.

Судя по ветке это QBasic, но тогда при чем тут исходники Quake2?
На QBasic написать что-то коммерческое невозможно, естественно я и не подразумевал этого.
Меня попросили предъявить доказательство моих слов, что в большой коммерческой программе
(а Quake 2 была такой программой) есть переходы. Да мне не пришло в голову ничего другого, не
все сейчас радостно публикуют свои передовые разработки, это абсурд. Поэтому я говорю, кто
достанет сверхсовременные исходники - пожалуйста, вот тогда будет разговор(это обращение ко всем, утверждающим обратное).

JUMP и используется там чрезвычайно активно
Я бы сказал без него там никак, можно конечно использовать флаги вкупе с логическими
операциями, но это в большинстве случаев будет менее эффективно, нежели поставить переход.
Хотя обойтись конечно и там можно, но это уже в виде прикола, например, всяким любителям
брейнфака или хардкорных оптимизаций. Нужно понимать, что из себя представляют языковые
конструкции и для чего они, чтобы чётко и ясно говорить кодеру - да вот это бесконечный цикл,
да во это выбор вариантов, да вот это цикл с пред\пост условием. Почти каждая конструкция -
завуалированный JMP, только компилятор(тупой бот) как назло будет ставить его не так, как надо
и в ботлнеках первфоманс будет жестоко падать, лечится только асмом вкупе с хорошим алгоритмом.

и в некоторых такого оператора вообще нет( FORTH)
Ну там у людей нету выхода.
Я же говорю всё это математически доказано, можно писать полностью без GOTO.
Единственное что, программист не всегда склонен думать о будущем, а когда прижимает,
начинаются проблемы, без переходов этих проблем в разы больше, если нет программ,
которые это делают автоматически.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.11.2011, 20:52
Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Да мне не пришло в голову ничего другого, не
все сейчас радостно публикуют свои передовые разработки, это абсурд. Поэтому я говорю, кто
достанет сверхсовременные исходники - пожалуйста, вот тогда будет разговор(это обращение ко всем, утверждающим обратное).
Ну я вам помогу в этом. Есть такая штука, как средство разработки драйверов - DDK. Выпущено естественно Мелкософтом. Существует для разных платформ, и кроме всего прочего содержит исходные коды драйверов. Т.е. стучу я сейчас по клавишам, а меня тихо обслуживает kbdclass.sys драйвер. Ну это ли не современно? Или это ли не авторитетно? Так вот, там в коде этих goto не мерено. Не верите? Прошу:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*++
 
Copyright (c) 2000  Microsoft Corporation
 
Module Name:
 
    bulkusb.c
 
Abstract:
 
    Bulk USB device driver for Intel 82930 USB test board
    Main module
 
Author:
 
Environment:
 
    kernel mode only
 
Notes:
 
    Copyright (c) 2000 Microsoft Corporation.  
    All Rights Reserved.
 
--*/
 
...
 
 if (!registryPath->Buffer) {
 
        BulkUsb_DbgPrint(1, ("Failed to allocate memory for registryPath\n"));
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        goto DriverEntry_Exit;
    } 
...
 
//
        // the device is idle if it has no open handles or pending PnP Irps
        // since we just received an open handle request, cancel idle req.
        //
        if(deviceExtension->SSEnable) {
        
            CancelSelectSuspend(deviceExtension);
        }
 
        goto BulkUsb_DispatchCreate_Exit;
    }
    
....
 if(deviceExtension->UsbInterface) {
 
        interface = deviceExtension->UsbInterface;
    }
    else {
 
        BulkUsb_DbgPrint(1, ("UsbInterface not found\n"));
 
        ntStatus = STATUS_INVALID_DEVICE_STATE;
        goto BulkUsb_DispatchCreate_Exit;
    }
 
if(InterlockedExchange(&DeviceExtension->IdleReqPend, 1)) {
 
        BulkUsb_DbgPrint(1, ("Idle request pending..\n"));
 
        KeReleaseSpinLock(&DeviceExtension->IdleReqStateLock, oldIrql);
 
        ntStatus = STATUS_DEVICE_BUSY;
 
        goto SubmitIdleRequestIrp_Exit;
    }
 
...
Ну вы поняли, можно не продолжать. Н.Вирт человек авторитетный, за то Б.Гейтс богатый, и как видно GOTO тут не помеха, да.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
20.11.2011, 21:10
Н.Вирт человек авторитетный
С этим не поспоришь.

Pro_grammer, исчерпывающе
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
04.06.2016, 21:09
Я за GOTO
1. Как выйти из цикла без оператора GOTO?
Да есть конструкция типа EXIT FOR.
А если требуется не просто выйти. А еще перешагнуть
хотя бы через один оператор. Тут GOTO выигрывает.
2. Как выйти из кратного цикла?
Лучше GOTO ничего нет. Но об этом предпочитают молчать.
3. Как досрочно завершить цикл? Но не выйти из него?
Я не слышу ответа...
1
 Аватар для STAR WARS
34 / 40 / 3
Регистрация: 24.11.2016
Сообщений: 159
18.01.2017, 20:51
На этом сайте в разделе СВЯЩЕННЫЕ ВОЙНЫ идёт голосование кто за GOTO кто нет.Я голосовал за GOTO.Счёт идёт на равных.
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
18.01.2017, 21:20  [ТС]
Зачем пытаться реанимировать темы 6-летней давности? Чтобы набросить дерьма на вентилятор? История уже всё расставила по местам: язык, Бейсик, ориентированный на GOTO, благополучно сдох, уступив дорогу современным структурированным языкам. И царство ему небесное.
А попытки энтузиастов что-то ещё на нём писать - ну, это мёртвому припарки...
0
Эксперт по электронике
6798 / 3225 / 335
Регистрация: 28.10.2011
Сообщений: 12,588
Записей в блоге: 7
18.01.2017, 23:22
Goto как и Gosub даже из современных бейсиков не исчез, но как правило, обоснованное его использование бывает редко.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2017, 23:22
Помогаю со студенческими работами здесь

Оператор GOTO
Дано 50 вещественных чисел. Определить наибольшую величину из них. С помощью оператора GOTO

Оператор goto
Как передать управление из одного класса в другой c помощью goto(или как то по другому)?

Оператор GOTO
GOTO в топку. В нормальных языках нужны только циклы, а GOTO пусть останется только для *.bat, и *.cmd файлов.

оператор GoTo
Ввести с клавиатуры произвольное целое число X в диапазоне от 80 до 500. Если введенное число X не соответствует указанному диапазону, с...

Безусловный оператор GoTo
Доказать (путем перебора возможных значений), что для любых величин А,В,С типа Boolean следующие пары логических выражений имеют одинаковые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru