Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2

"Запрещённый" goto

18.10.2020, 16:18. Показов 3123. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема создана на основе родительской Переместить пользователя снова на ввод числа, если он вводит не число

Сюда вынесена дискуссия об использовании goto в программах на C#.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2020, 16:18
Ответы с готовыми решениями:

Для для чего применяются Generic types и как добавить новую функциональность в класс, запрещенный к наследованию?
Для для чего применяются Generic types? Как можно добавить новую функциональность в класс, запрещенный к наследованию или код которого не...

Использование goto
if (choice == "3") { perehod3:; Console.WriteLine("\nВыберите действие:"); ...

Использование goto
Ребята, нужно выйти из вложенного условного оператора switch, решил использовать goto. Но он прерывает выполнение программы, после того как...

40
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,762
Записей в блоге: 2
18.10.2020, 22:55
Студворк — интернет-сервис помощи студентам
goto встречал в исходниках .NET Framework. Всегда как средство низкоуровневой оптимизации. То есть с помощью goto там имитируется вызов метода.

Добавлено через 10 минут
https://github.com/dotnet/core... extInfo.cs

А вот и конкретный пример
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
18.10.2020, 22:57
Цитата Сообщение от Toros1992 Посмотреть сообщение
Всегда как средство низкоуровневой оптимизации
полагаю, что он ничего не оптимизирует, на его основе все написано - циклы, вызовы методов, условные операторы. Все переходы.
1
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,762
Записей в блоге: 2
18.10.2020, 22:58
Рядовой, ну как не оптимизирует. Goto быстрее, чем вызов метода
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.10.2020, 23:00
Рядовой, вызов метода все локальные переменные в стек сбрасывает, а goto позволяет этого избежать.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
18.10.2020, 23:00
Toros1992, достоверно утверждать не могу, но мне кажется, вызов метода - и есть goto
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,762
Записей в блоге: 2
18.10.2020, 23:03
Рядовой, в общем это не так. Вызов метода - это работа со стеком, а goto грубо говоря установка нового значения в счётчик команд
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
18.10.2020, 23:06  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
while (true) {
О таком решении я тоже писал.
Но "вечный цикл", возможно ошибаюсь, тоже нельзя отнести к хорошему стилю программирования.

Честно говоря, вот конкретно для этой задачи, я не могу сказать, что хоть один вариант меня полностью устраивает, в том числе и мой.

Для реального использования лучше инкапсулировать вывод сообщения и ввод значения в статическом методе.
Но такой вариант, как мне кажется, будет сложен для начинающих.
C#
1
2
3
4
5
6
7
8
9
10
static bool TryInputDouble(string message, out double numeric)
{
     Console.Write(message);
     return double.TryParse(Console.ReadLine(), out numeric)
}
 
----------------
     -----------------
      while(!TryInputDouble("Введите значение а: ", out double a))
             Console.WriteLine("Ошибка ввода!!! Повторите ввод !!!");
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.10.2020, 23:14
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но "вечный цикл", возможно ошибаюсь, тоже нельзя отнести к хорошему стилю программирования.
Ничего плохого в сторону вечных циклов не видел.

По мне решения от Rius, ваше последнее и мое с переменной вполне приемлемы.
1
Эксперт .NET
 Аватар для Rius
13849 / 7891 / 1707
Регистрация: 25.05.2015
Сообщений: 23,960
Записей в блоге: 14
19.10.2020, 06:25
Элд Хасп, повторять ввод, пока не будет введено правильное значение, это и есть цикл.
1
 Аватар для Aferuga
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
20.10.2020, 03:44
Цитата Сообщение от Toros1992 Посмотреть сообщение
А вот и конкретный пример
Мне вот этот момент прям понравился :
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
            if (charCount == 0)
            {
                goto Return;
            }
//....
        Return:
            return;

А просто return вызвать религия не позволяет?

Добавлено через 2 минуты
З. Ы. А метками я последний раз целенаправлено пользовался когда писал на QBasic.
0
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,762
Записей в блоге: 2
20.10.2020, 06:28
Aferuga, там не только этот вызов goto. Но согласен, именно этот выглядит странно
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
20.10.2020, 09:11
Нас в универе препод по рукам бил за goto. Говорил, "вы же не на бейсике пишите". И мог свободно завернуть работу и не принять ее, если в ней был использован этот оператор. После этого я долго писала на Делфи (паскаль), теперь вот c#, и у меня ни разу не возникло ситуации, где бы мне мог пригодиться оператор goto. Поэтому мое личное мнение:
1. Оператор Goto существует (microsoft, да и многие другие компании его зачем-то оставили), значит имеет право на существование.
2. Без него абсолютно спокойно можно обойтись, поэтому его использование - исключительно на совести программиста.
3. Развязывать холивар - глупо и не правильно. У меня аллергия на цитрусовые (если сразу съем килограмм - могу не выжить), и в мире много таких людей, но выглядело бы очень странно, если бы мы собрались и устроили митинг за то, чтобы все апельсины в мире уничтожили, потому что от них можно умереть.
4. Тру говнокодер и без goto может превратить листинг программы в кучу непонятного нечто) Поэтому, даже если запретить его на законодательном уровне это мало на что повлияет
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
20.10.2020, 11:17  [ТС]
Kyra90, вопрос немного в другом.
Стоит ли усложнять код с единственной целью: избежать использования goto ?
И в плотную к этому примыкает вопрос: что такое усложнение кода?
Ответ на второй, очевидно, зависит от квалификации.
Поэтому в ввиду Раздела подразумевается "для начинающих".
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
20.10.2020, 12:03
Цитата Сообщение от Элд Хасп Посмотреть сообщение
усложнять код с единственной целью: избежать использования goto ?
Как по мне, goto усложняет код. И если он пару раз использовался в программе, то черт с ним, но если им злоупотреблять, то можно привести код программы к вообще не читаемому виду.

Просто бывает же такое... написали Вы программу, и пользуетесь, допустим. А через год решили подправить что то, открываете код, он от времени из памяти уже ушел и нужно заново его прочитывать, вспоминать... а там.. мама родная) 50 goto на кв.см кода)))

Поэтому да, стоит отказаться от goto и использовать другие способы для... (для чего там goto используют)). Это мое мнение, но отговаривать его использовать кого то другого я вряд ли буду)
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,244
Записей в блоге: 3
20.10.2020, 12:27
История про то
Как меня Verevkin за гоуту покусал

я был прав, но он не понял(...), ах, как жаль

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Стоит ли усложнять код с единственной целью: избежать использования goto ?
нет - не стоит,
а кто считает обратное должны подвергаться нещадному троллингу.

если код будет работать чуток быстрее и читать его будет понятнее,
то с какой кстати отказываться от гоуту,

но правда, если его величество ПРЕПОД сказал отказаться, то да, тут уж без вариантов.
0
Заблокирован
20.10.2020, 12:30
Я позволю себе некомпетентно заметить: "заставь дурака богу молиться - он и лоб расшибёт".
Хоть я сам и являюсь лицом пострадавшим лично от goto ("переводил" на c# программу с фортрана, в которой было порядка полутора сотен перекрестных goto и доступный соавтор той программы был как раз под 90 и ничем не мог помочь ввиду наступившей забывчивости), но сам по себе goto не может считаться злом. Хотя, сам его всячески избегаю, то бишь и у меня лоб расшибленный)))
Наверное, если он и метка рядом (легко ловятся взглядом), то вполне прокатит, если такое решение имеет какой-то смысл по сравнению с альтернативным.
За goto не нужно руки отшибать, а нужно просто давать задачки на восстановление алгоритма программы с сотней goto - руки сами по себе после этого отказываются набирать эти магические буквы - goto
P.S. Меня так когда-то отучили есть сникерсы (и вообще эти "шоколадные батончики"). Как-то (ещё в 90-е) крепко напился спиртом абсолют, закусывая сникерсами - с тех пор я эти гадские противные сникерсы видеть не могу.
3
20.10.2020, 12:36

Не по теме:

Ради интереса проверил сколько goto в моей программе на QBasic, написанной 20 лет назад. Насчитал примерно 200...

0
Заблокирован
20.10.2020, 12:40
Пожалуй, имеет смысл сделать тему - "О пользе применения goto в c#" - чтобы там гуру дали чОткие рекомендации какие преимущества дает правильное применение goto.
0
Эксперт .NET
 Аватар для Rius
13849 / 7891 / 1707
Регистрация: 25.05.2015
Сообщений: 23,960
Записей в блоге: 14
20.10.2020, 12:47
titan4ik, Гуру GoTo уже написали https://www.cyberforum.ru/blog... g5875.html
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
20.10.2020, 12:54  [ТС]
Цитата Сообщение от Kyra90 Посмотреть сообщение
Просто бывает же такое... написали Вы программу, и пользуетесь, допустим. А через год решили подправить что то, открываете код, он от времени из памяти уже ушел и нужно заново его прочитывать, вспоминать... а там.. мама родная) 50 goto на кв.см кода)))
Посмотрите начало темы.
Там дан конкретный пример для которого собственно и идёт обсуждение.

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

Не по теме:

Цитата Сообщение от titan4ik Посмотреть сообщение
Меня так когда-то отучили есть сникерсы (и вообще эти "шоколадные батончики"). Как-то (ещё в 90-е) крепко напился спиртом абсолют, закусывая сникерсами - с тех пор я эти гадские противные сникерсы видеть не могу.
А спирт?




Добавлено через 5 минут
Цитата Сообщение от titan4ik Посмотреть сообщение
"переводил" на c# программу с фортрана, в которой было порядка полутора сотен перекрестных goto
В Фортране же, вроде, просто не было циклов (кроме for) и там всё делалось через if-goto.
И насколько помню, несмотря на архаичность, Фортран давал (а может и до сих даёт) самый быстрый код для языков высокого уровня.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2020, 12:54

Альтернатива goto
Всем привет.Второй день думаю как разрешить эту ситуацию и что-то нету продвижения(.Как надо переделать код что бы с блока else переходило...

Аналог GOTO
Добрый день! Сразу прошу прощения, что вопрос будет без примера кода, - доступ к студии в данный момент отсутствует. В свете того, что...

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

Замена goto
Можно ли чем заменить goto в данном случае? static void Main() { start: { ...

Использование goto в C#
goto противоречит принципам структурированного программирования


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru