|
Платежеспособный зверь
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
|
|
Оператор GOTO: за и против20.11.2011, 16:38. Показов 15148. Ответов 146
Метки нет (Все метки)
Люди, по ходу, газет не читают:
Оператор GOTO в языках высокого уровня является объектом критики, поскольку чрезмерное его применение приводит к созданию нечитаемого «спагетти-кода». Впервые эта точка зрения была отражена в статье Эдсгера Дейкстры «Доводы против оператора GOTO», который заметил, что качество программного кода обратно пропорционально количеству операторов GOTO в нём. Статья приобрела широкую известность как среди теоретиков, так и среди практиков программирования, в результате чего взгляды на использование оператора GOTO были существенно пересмотрены. В своей следующей работе Дейкстра обосновал тот факт, что для кода без GOTO намного легче проверить формальную корректность. Код с GOTO трудно форматировать, так как он может нарушать иерархичность выполнения (то есть парадигму структурного программирования), и потому отступы, призванные отображать структуру программы, не всегда могут быть выставлены правильно. GOTO также аннулирует многие возможности компилятора по оптимизации управляющих структур Доводы против оператора GOTO оказались столь серьёзны, что в структурном программировании его стали рассматривать как крайне нежелательный Начало тут
0
|
|
| 20.11.2011, 16:38 | |
|
Ответы с готовыми решениями:
146
Оператор GOTO и его метки Goto - за и против Оператор goto |
|
Кормпилятор
|
||
| 28.01.2017, 13:04 | ||
|
Конечно допускаю, что где-то(достаточно редко) вложенные циклы в количестве 100500 может быть и нужны, но подкорка головного мозга понимает, что за прогу, которая прошибает бошкой стену и вешает проц намертво, никто ничего не заплатит. В подавляющем большинстве недетерминированных задач использовать полный перебор - себе дороже.
0
|
||
| 28.01.2017, 13:42 | |
|
Quiet Snow
Мне кажется, что вы не до оцениваете применение кратных циклов в большом количестве для практики. Обычно и не требуется ТОТАЛЬНЫЙ ПЕРЕБОР. А требуется строго определенное выполнение самого внутреннего цикла (там может быть и условие). Иными словами такие программы работают достаточно быстро и в ряде случаев эффективно. Им помогает GOTO.
0
|
|
|
Кормпилятор
|
||
| 28.01.2017, 13:52 | ||
|
нужны ваши программы, какие программы и как их можно применить для чего-то полезного...
0
|
||
|
|
||
| 28.01.2017, 13:56 | ||
|
0
|
||
|
Кормпилятор
|
||
| 28.01.2017, 15:07 | ||
|
гигом памяти, да и даже старее компы не списывают. Но даже если и седьмой кор, это не повод поддерживать подход переборов и тотальный подход многопоточности. Нужно рассчитывать на то, что прогу могут запустить на самом убогом оборудовании. Про многоядерность говорил ещё с 2004 года - что оно тупиково, сейчас это отчётливо видно(12 ядер да сваяли, а частота какая? И как там будет работать одноядерная прога... знамо как, как кусок какахи...), а единственное где применяется эта самая многоядерность, так это развесить программы по ядрам, ну или в видеокодеках, то что можно дёшево распараллелить. В итоге люди предпочитают брать поменьше ядер и побольше частоту, да ещё и разгоняют свои бедные процессорики, сдавая их через два-три года в БУ, да гонимое железо нормально подолгу не работает. Во-первых современные компы недалеко ушли по сравнению с теми же пеньками прескотами в плане одноядерных задач и если бы не SIMD и толстые кеши, то разница была бы не сильно очевидная, во-вторых ресурсы всегда сильно ограничены, а пользователь всегда хочет комфорта, удобства и чтобы не было подвисаний и фризов, поэтому более интеллектуальные подходы как правило работают лучше. На самом деле многоядерность это штука довольно нестабильная, в плане своей концепции, Далеко не каждую архитектуру можно нормально заточить с учётом всех факторов. К тому же она значительно усложняет архитектуру софта. Приведу пример, сижу, допустим поигрываю на гитарке, повесил VSTHost на одно ядро дал ему приоритет, вдруг с бодуна касперыч или любой другой софт резко начинает конкурентно отбирать ЦП у VST хоста, тот начинает хрипеть, т.к. сбивается вся синхронизация (там дабл буфер флипующийся аппаратно с нотификацией) и что мне это должно доставить наслаждение, рестартать движок каждый раз когда, либо скайп что-то пукнет, либо анвирь полезет сканировать или обновляться(а его на ядра другие нельзя перевесить). Также с другим софтом, под XP и семёркой(в меньшей степени но тоже есть) чувствуется когда первое ядро забито под завязку, начинает останавливаться вся система. Загружаешь больше 40% на всех ядрах, реалтайма уже не видать(на далеко не слабом оборудовании при грамотном распределении софта по ядрам), проги начинают тупить, фризить, заикаться, потому что есть такой фактор как шина данных\команд и она не резиновая (напомню что в любой многопоточной системе всё это добро(не заточенное, т.е. код который называют небезопасным, а его валом) по итогу хардварно сводится в последовательный процесс, т.к. железо не может просто взять и забить на свои функции, если 4 потока захотят одновременно без специальных средств синхронизации получить доступ к одному участку памяти, шина данных окажется в затруднительном положении, но хардвар обязан будет такую ситуацию обработать исходя из распределения возможностей своих конвейеров, силу боттлнека на 12 ядерном компе даже боюсь представить, там шина конечно толстенная, но боюсь она этого не стерпит... Самый пожалуй дерьмовый фактор - когда программа не может знать сколько ресурсов есть в системе, т.к. на них постоянно влияют другие приложения. В таких условиях прога должна быть либо адски заточена потреблять с каждого ядра по чуть чуть и при этом насытиться, либо исповедовать старую проверенную временем идеологию - быть оптимизированной настолько насколько это возможно под одно ядро, но при определённых процессах занимать и другие ядра. Конечно этим всё не ограничивается, сейчас люди ковыряют и мелкозернистое распараллеливание, может это в будущем и будет той целевой нишей многоядерности вкупе со всякими OpenCL и CUDA, но сейчас многоядерность слишком неэффективна, а кодеры слишком плотно разожрались увидев гигабайты холёной оперативы.
0
|
||
|
34 / 40 / 3
Регистрация: 24.11.2016
Сообщений: 159
|
|
| 28.01.2017, 19:32 | |
|
Как без гото переходить от одного блока к другому блоку?У меня там программа готовая весит в одной из 2 моих тем, откройте её и перепишите для меня пожалуйста без гото.Я ясно себе всё представляю и на такую простую тему разговаривать не хочу.
![]() ![]() Добавлено через 24 минуты Простейший способ создавать блоки использовать SLEEP 1000 чтобы сразу не пролетело без нажатия вами кнопки.
0
|
|
|
34 / 40 / 3
Регистрация: 24.11.2016
Сообщений: 159
|
|
| 28.01.2017, 19:46 | |
|
Впереди идущие данные должны быть в программе уничтожены.
0
|
|
|
Кормпилятор
|
||||
| 29.01.2017, 01:43 | ||||
|
Какие блоки через SLEEP? Какие "Впереди идущие данные"?
Потому что точек входа может быть много, компилятору нужна однозначность. Поэтому для этой задачи лучше использовать логику на защёлках. Внутри процедур переходы допустимы, но в почти 100% случаев как раз внутри хорошо оформленных процедур они и не нужны. Исключение - это обработчики ошибок.
0
|
||||
| 29.01.2017, 13:47 | ||||||
|
Реальная программа с оператором GOTO
конечно я могу написать и без оператора GOTO, но кода будет несколько больше (данная программа вычисляет и распечатывает на экран простые числа от 5 до 97) Это тот случай где GOTO делает программу проще и яснее!!
0
|
||||||
|
Платежеспособный зверь
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
|
|||||||
| 29.01.2017, 16:53 [ТС] | |||||||
0
|
|||||||
|
34 / 40 / 3
Регистрация: 24.11.2016
Сообщений: 159
|
|
| 29.01.2017, 17:01 | |
|
В математике бывает плюс и минус не использовать гото это всё равно что из математики удалить минус.Процедуры,функции,подпрограммы увеличивают делая вставку в программу это как в математике знак плюс а гото выключение части программы это как знак минус.
0
|
|
|
Платежеспособный зверь
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
|
||
| 29.01.2017, 23:20 [ТС] | ||
|
0
|
||
| 30.01.2017, 09:45 | |
|
Мне кажется, что можно подвести некоторые итоги.
Итак, я представляю лагерь сторонников GOTO. ОБВИНЕНИЕ: GOTO усложняет понимание программы 1. ОДИН оператор GOTO не превратит программу в головоломку, так что Один GOTO для программы вполне приемлем. 2. Оператор GOTO целесообразно применять для выхода из сложных конструкций. 3. Оператор GOTO должен быть выше своей метки 4. Метка должна быть чётко видна и занимать целую строку примечание если соблюдать эти правила, то GOTO внесёт Смысл в Вашу бессмысленную жизнь!! (впрочем есть люди, у которых аллергия на GOTO и выше сказанное к ним не относится)
1
|
|
|
Платежеспособный зверь
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
|
||||
| 30.01.2017, 10:01 [ТС] | ||||
|
PS Лет 20 я программировал на Бейсике и написал за свою жизнь столько операторов GOTO, сколько Вам во сне присниться не может. Это трудности роста. Когда Вы изучите какой-нибудь нормальный язык, Вы забудете GOTO навсегда и будете (как и я) с улыбкой вспоминать свои доводы в его защиту.
0
|
||||
|
Модератор
|
||||||||||||
| 30.01.2017, 10:31 | ||||||||||||
2
|
||||||||||||
|
|
|
| 30.01.2017, 12:30 | |
|
1
|
|
| 30.01.2017, 12:30 | |
|
Помогаю со студенческими работами здесь
80
Оператор goto
оператор GoTo Безусловный оператор GoTo Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|