Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Результаты опроса: Используете ли Вы оператор goto?
Программирую исключительно на goto 4 10.00%
Использую, если имеет смысл 22 55.00%
Категорически не использую 13 32.50%
Использую, но никто об этом не знает 1 2.50%
Голосовавшие: 40. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.59/68: Рейтинг темы: голосов - 68, средняя оценка - 4.59
198 / 93 / 43
Регистрация: 09.11.2019
Сообщений: 414

Ваше отношение к goto

10.08.2021, 19:57. Показов 15139. Ответов 95
Метки goto (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Обычно оператор безусловного перехода goto хейтится.
Данным постом я не хочу поднимать очередной холивар, хочу просто узнать мнение окружающих - как относитесь к практике применения 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
   private Func<Data, bool> GetSearchPredicate()
        {
            Func<Data, bool> predicate;
 
            switch (_currentState)
            {
                case SelfState.Improve:
                {
                    // Внутри SomeMethod заложена нужная логика
                    predicate = x=> SomeMethod(_field, x);
                    break;
                }
                case SelfState.Replannig:
                {
                    predicate = x=> SomeMethod(_field, x);
                    break;
                }
                default:
                {  
                    goto case SelfState.Improve;   
                }
            }
 
            return predicate;
        }
Какие выходы, не используя goto:
1. Либо сделать присвоение predicate = null(или ещё что) и избавиться от блока default целиком. Хотя лично мне спокойнее, когда default в коде имеется.
2. В блоке default скопипастить кейс, на который ссылаюсь(тогда при изменениях надо помнить, что менять нужно в 2 местах).

В свитче я оставил goto(мой первый goto в жизни)

Другой пример:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            foreach (var group in groups)
            {
                foreach (var answer in group)
                {
                    if(statement)
                    {
                        goto next;
                    }
                }
 
            }
            next:
            {
 
            }
Какие выходы, не используя goto:
1. Применить SelectMany к groups и оставить один цикл foreach.
2. Повозиться с флагами и break'ами.

Здесь мне готушить не хочется, не знаю почему.

Т.е. можно и без goto жить в обоих приведенных(и ещё n неприведённых) примерах.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2021, 19:57
Ответы с готовыми решениями:

Ваше отношение к DOSу
Интересно, много ли кто её использует? Я отвечу &quot;Люблю посидеть&quot;. При покупке винчестера планирую для ДОСа выделить около 1 Гиг местав...

Ваше отношение к SCRUM
Мировые эксперты считают, что без SCRUM в принципе невозможна разработка качественного программного обеспечения. Интересно остались ли...

Ваше отношение к Windows 10
как вы относитесь к Windows 10

95
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.08.2021, 17:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HF Посмотреть сообщение
Надеюсь поток мыслей был полезен.
Слегка запоздалая мысль. Более того - не правильная. Война началась, война идет...
0
198 / 93 / 43
Регистрация: 09.11.2019
Сообщений: 414
14.08.2021, 19:54  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Война началась, война идет
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
14.08.2021, 20:39
__Corey, но вы точно знали, куда ударить? Прям как в июне 41-го...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
14.08.2021, 23:42
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Вы пробовали читать исходники на Ассемблере?
Не только пробовал, а когда и активно использовал Асемблер.
В том числе оптимизировал различные драйвера.
Я уже писал об этом ранее, когда приходилось подсчитывать каждый байт и заменять call на jump.

Цитата Сообщение от QuakerRUS Посмотреть сообщение
По-моему это настолько очевидно,
Но вы же видите, хотя бы по этому обсуждению, что многим это не только неочевидно, но кажется достаточно абсурдным.

Цитата Сообщение от QuakerRUS Посмотреть сообщение
Не вижу негативности. Условие выхода из цикла четко прописано перед break.
И это хуже чем goto, на мой взгляд.
Такой break ни чем не отличается от goto с переходом вперёд, но добавляет лишний код.

Вопрос не в том можно ли реализовать любой алгоритм без goto.
Это априори возможно.
По сути можно любой цикл использовать как замену goto.
Вопрос в том какой код более понятный.
Я не исключаю того, что для некоторых задач код с goto понятнее, прозрачнее чем искусственное введение в него вечного цикла или одноразового метода.
В том числе это относится к примеру для ввода значения переменной.

Цитата Сообщение от wizard41 Посмотреть сообщение
Вы продолжаете верить в "профессионалов Net" как в бога. (религия?)
При чём здесь бог?
Вы указываете на то, что в .Net его не должны применять.
Я вам сразу написал, что не смотрел исходники.
Если приведёте конкретный пример и свои аргументы, то какой-то смысл это будет иметь.
Возможно по этому конкретному примеру я оспорю ваши аргументы или соглашусь с вами.
Но в целом вопрос об использовании goto в .Net - это вопрос к его разработчикам, а не ко мне.

Для меня это только пример того, что в каких задачах использование goto даёт больше преимуществ, чем реализация без него.

По вашему, если я доверяю своё лечение докторам - это значит я верю им как богам?
Доверие к специалистам в той или иной области не имеет никакого отношения к религии.


Цитата Сообщение от wizard41 Посмотреть сообщение
Так что вы тут доказываете тогда?
Я доказываю, что ваши аргументы (сторонников на полного исключения goro) не состоятельны.
По сути ничего кроме "goto - это плохо" никто никаких аргументов не привёл.

Опять таки не надо воспринимать мои слова как призыв к активному использованию goto.
Это не так.
Даже задача с вводом переменной, если расширить цикл for блоком предвыполнения, может быть очень красиво и эффективно решена этим циклом.
Но такого цикла нет.
Поэтому остаются три варианта: goto, одноразовый метод, вечный цикл.
Из трёх, на мой взгляд, самый понятный, прозрачный - это с goto.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
14.08.2021, 23:50
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но вы же видите, хотя бы по этому обсуждению, что многим это не только неочевидно, но кажется достаточно абсурдным.
Кто еще кроме вас подвергал сомнению использование вечных циклов?

Цитата Сообщение от Элд Хасп Посмотреть сообщение
И это хуже чем goto, на мой взгляд.
Такой break ни чем не отличается от goto с переходом вперёд, но добавляет лишний код.
Вопрос не в том можно ли реализовать любой алгоритм без goto.
Это априори возможно.
По сути можно любой цикл использовать как замену goto.
Вопрос в том какой код более понятный.
Я не исключаю того, что для некоторых задач код с goto понятнее, прозрачнее чем искусственное введение в него вечного цикла или одноразового метода.
В том числе это относится к примеру для ввода значения переменной.
Думаю на этом нам стоит остановиться, так как аргументы начинают повторяться и вряд ли что-то новое мы скажем.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
15.08.2021, 00:13
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Кто еще кроме вас подвергал сомнению использование вечных циклов?
Бесконечный цикл - Вики
В написании программ, решающих реальные задачи пользователей, бесконечные циклы, как правило, являются одним из источников неустойчивой работы программы.
Добавлено через 29 секунд
+ к этому моя личная практика поиска багов.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
15.08.2021, 00:36
Лучший ответ Сообщение было отмечено SlavaRus как решение

Решение

Элд Хасп, не могу себе представить от этого бОльших проблем, чем от goto... Ну да ладно.
0
Эксперт .NET
 Аватар для Rius
13827 / 7899 / 1707
Регистрация: 25.05.2015
Сообщений: 23,975
Записей в блоге: 14
15.08.2021, 07:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
у меня нет текста MISRA.
Но было бы интересно, что там написано в отношении вечных циклов....
https://github.com/nr-electronics/MISRA
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
15.08.2021, 11:08
Rius, в вашем блоге выписка из этого источника?

Добавлено через 40 минут
Rius, нашёл эти пункты.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
15.08.2021, 12:30
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я доказываю, что ваши аргументы (сторонников на полного исключения goro) не состоятельны.
По сути ничего кроме "goto - это плохо" никто никаких аргументов не привёл.
А какие аргументы я приводил? В пылу доказывания неизвестно чего, вы, видимо, теряете нить разговора. На всякий случай напомню свои тезисы: в большинстве случаев goto не использует никто. Его использование возможно, но не желательно и тем паче крайне не желательно в корпоративной среде. Это не я придумал - так сложилась практика и общественное мнение. Вот и все мои "аргументы".
Вы, прибегая в своих рассуждениях к исходникам Net, так и не удосужились назвать хоть какие-то причины использования goto в них. Я попытался это сделать за вас, предположив постом выше, что на это они пошли ради некоего быстродействия. Но не важно. Иных принципиальных примеров для популяризации goto найти крайне сложно, зато статей порочащих эту практику - навалом.
К чему бы мы не пришли по итогу нашей дискуссии, это ровным счетом не меняет ничего. Поэтому я и спросил - что вы доказываете? А если ваша цель совершить революционный переворот в программировании, то вы явно выбрали не ту площадку для выражения своих мыслей.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
15.08.2021, 20:07
Цитата Сообщение от wizard41 Посмотреть сообщение
К чему бы мы не пришли по итогу нашей дискуссии, это ровным счетом не меняет ничего.
Это точно.

Цитата Сообщение от wizard41 Посмотреть сообщение
А если ваша цель совершить революционный переворот в программировании
Вы о чём вообще?
Какая революция?

Цитата Сообщение от wizard41 Посмотреть сообщение
Поэтому я и спросил - что вы доказываете?
Первый же мой пост в этой теме:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ключевое - это то, что не 100%.
Оценка на качество кода не определяется наличием или отсутствием goto.
Код должен быть прозрачным, легко понимаемым даже без комментов, не содержать дублирования и т.д.
Другое дело, что использование goto действительно по делу, без ухудшения качества кода встречаются крайне редко.
Я думаю даже гораздо реже чем 1 на 1000.
То есть вы даже слегка польстили ему (goto).
Больше ничего.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,758
Записей в блоге: 3
20.08.2021, 10:17
Цитата Сообщение от HF Посмотреть сообщение
- мне надо было выйти из цикла и отобразить ошибку обработки
Цитата Сообщение от HF Посмотреть сообщение
"чё то сложно" думал я. проще перейти в метку выхода, там это итак всё закроется и отобразится
Ну вот тут вы просто ушли от сложного к простому, применив goto, как я понимаю.
Цитата Сообщение от HF Посмотреть сообщение
- парсер. есть сложная (на тот момент или непродуманный сценарий) логика анализа строк файла
Здесь, честно говоря, я не очень понял мысль (логику), но что-то мне подсказывает что при помощи Regex и всяких группировок можно было бы решить эту задачу.
На самом деле, если вы единственный разработчик и хорошо понимаете что делаете, то почему бы и нет. Но в коллективе же вам бы наверное подсказали, как обойтись без goto.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
24.08.2021, 11:34
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Кто еще кроме вас подвергал сомнению использование вечных циклов?
Нужно запилить отдельный опрос по while(true)!

p.s. не любитель while(true), но на практике так обычно никто и не пишет. Разве что когда очень спешат и не до рефакторинга. Форум и примеры с него не показатель -- я тут такую чушь порой пишу специально, что лучше никому и не показывать.
0
Эксперт .NET
 Аватар для Rius
13827 / 7899 / 1707
Регистрация: 25.05.2015
Сообщений: 23,975
Записей в блоге: 14
24.08.2021, 12:00
Цитата Сообщение от Wolfdp Посмотреть сообщение
но на практике так обычно никто и не пишет. Разве что когда очень спешат и не до рефакторинга.
В embedded пишут сплошь и рядом, бесконечный цикл - основа встроенного ПО. Потому что там некуда возвращаться из программы.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
24.08.2021, 13:20
Цитата Сообщение от Rius Посмотреть сообщение
В embedded пишут сплошь и рядом
Это же система.
"Внутри" Windows тоже может быть есть вечные циклы.
В данной теме, я так думаю, речь идёт о приложениях работающих поверх полноценной ОС.
1
24.08.2021, 13:57

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
В embedded пишут сплошь и рядом
Говорят в марсианских роверах цикл такой на самом деле
Code
1
2
3
4
while (onMars)
{
     //...
}

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2021, 13:57

Ваше отношение к co-working?
Википедия. Считаете ли Вы идею co-working оригинальной и востребованной? Может уже кто то пробывал работать на себя таким образом....

Ваше отношение к flash-заставкам
Хотелось бы узнать Ваше отношение к заставкам перед попаданием на основной сайт-на главную страницу. Как они повлияют на положение...

Ваше отношение к деятельности Anonymous
Вот что хочется узнать ... Анонимус не определена организация с неопределенными участниками и какой мутной идеей. Но они нашли немало дирок...

Ваше отношение к NULL полям
Доброго времени суток! Искал я себе идею для учебного БД и наткнулся на идею с почтой, идея меня заинтересовала, но в ходе разработки БД...

Ваше отношение к не своим детям
Имеете ли Вы собственных детей или нет - совершенно не влияет на Ваше отношение к детям, которые не являются Вашими, но тем не менее...


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

Или воспользуйтесь поиском по форуму:
96
Ответ Создать тему
Новые блоги и статьи
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. Сразу отвечу: А в PvP с ним. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru