powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / этот страшный ужасный GoTo
25 сообщений из 76, страница 3 из 4
этот страшный ужасный GoTo
    #38097088
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, что-бы не разговаривать о сферичской лошаде в стратосфере, урезанный пример в студию, наглядно демонстрирующий, что без GOTO обойтись нельзя.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097144
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУпример ..., в котором не обойтись без GOTO

Я сам не сторонник GOTO, за столько лет у меня необходимости применения не было. break/continue/return как то вполне хватало :-) Но если без него всё сильно усложняется, почему бы не применить?
Для C# в общем не особо актуально, но на PowerBuilder и T-SQL не так всё радужно

но примеры привести можно:
1) анализ кучи условий, каждое из которых имеет смысл только после проверки предыдущего.
делать без goto - это либо сильно увеличить вложенность условий, либо рассчитывать на неочевидные для каждого порядок анализа логического выражения компилятором. И в том и в другом случае неудобно.

2) как уже говорили, вложенные циклы. правда 10 таких циклов - это даже не говнокод. В циклах тоже можно обойтись без goto и даже никаких отдельных флагов для каждого цикла не нужно. Просто получится неудобно читать.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097184
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79на неочевидные для каждого порядок анализа логического выражения компилятором.
это о чём? Порядок вычисления либо не регламентирован, либо чётко задан (&& ||)
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097213
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то Лёня не просыпается, GOTO его любимая тема. Вчера видно совсем в гавнище домой пришел
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097219
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУbeg-in-er, что-бы не разговаривать о сферичской лошаде в стратосфере, урезанный пример в студию, наглядно демонстрирующий, что без GOTO обойтись нельзя.
ещё 40 лет была доказана теорема, что без можно написать любой метод без goto. любой, так что , ссылаясь на ту теорему, можно сказать нет такого кода , в котором нет альтернативы готу. вопрос в применимости.

вот мой говнокодище н-летней давности. какой то промежуточный вариант. боевой, который пошёл в серию не нашёл.
рекурсионно ищем контур гамильтона.
выход из внутренного цикла должен быть именно таким. break. не годится. делать доп условие if - можно , но вредно.
как минимум , когда ищем правильный алгоритм, готу надёжное подспорье. только что увлекаться макаронами не надо.
Код: 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.
  void METOD_3_post_usl2(int[,] matrix, int HAMILTON_CONTUR, ref int GLOBAL_MIN, int LEV
    , int Qi, List<int> TT, int left_tt, StreamWriter sw, string ss, int level, int Low, int Hi, int tt_level)
        {
         
          if (METOD_3_post_usl2_FAST_OUT)         return;
          int qj;
        
            if (TT.Count < 1)
            {
              
                if (HAMILTON_CONTUR <= GLOBAL_MIN)
                {
                    GLOBAL_MIN = HAMILTON_CONTUR;
                    //....
                }
                return;
            }

            int h0 = HAMILTON_CONTUR;
            int dd = TT.Count;
            for (int i = 0; i < dd; i++)
            {
               
                qj = TT[i];
                if (matrix[Qi + 1, qj + 1] < 0) continue;
               // if (matrix[Qi + 1, qj + 1] > 600) goto ending;
                HAMILTON_CONTUR = h0 + matrix[Qi + 1, qj + 1];
                for (int Q = 0; Q < WIND_DOSTAVKI.Count; Q++)
                {
                    if (qj == WIND_DOSTAVKI[Q].point)
                    {
                        //if (matrix[Qi + 1, qj + 1] > 600) goto ending;
                        if (HAMILTON_CONTUR < WIND_DOSTAVKI[Q].lo)
                        {
                            if (HAMILTON_CONTUR + WAITING_WINDOWS < WIND_DOSTAVKI[Q].lo)
                                goto ending;
                            else
                            {
                                WAITING_BEFORE_POINT2[level] = WIND_DOSTAVKI[Q].lo - HAMILTON_CONTUR;
                              //  HAMILTON_CONTUR += (WIND_DOSTAVKI[Q].lo - HAMILTON_CONTUR);
                                
                            }
                        }
                        if (HAMILTON_CONTUR > WIND_DOSTAVKI[Q].hi) goto ending;
                        post_usl_точкИ_добавлена[Q] = true;
                       
                    }
                    if (HAMILTON_CONTUR > WIND_DOSTAVKI[Q].hi)
                        if (post_usl_точкИ_добавлена[Q] == false)
                            goto ending;
                }

                TT.Remove(qj);
            
                WAY[level] = qj;

                if (HAMILTON_CONTUR < GLOBAL_MIN)
                    METOD_3_post_usl2(matrix, HAMILTON_CONTUR, ref GLOBAL_MIN, LEV, qj, TT, (left_tt - 1), sw, ss, (level + 1), Low, Hi, tt_level);
                TT.Insert(i, qj);

                for (int Q = 0; Q < WIND_DOSTAVKI.Count; Q++)
                if (qj == WIND_DOSTAVKI[Q].point)
                    post_usl_точкИ_добавлена[Q] = false;
            ending:
                WAITING_BEFORE_POINT2[level] = 0;
             
            }
       }  // void METOD_3_post_usl2

...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097233
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилArm79на неочевидные для каждого порядок анализа логического выражения компилятором.
это о чём? Порядок вычисления либо не регламентирован, либо чётко задан (&& ||)

(obj != null) || (obj.value = 5)

если поменять местами, будет nullreference (при отсуствии obj)
компилятор не вычисляет всё выражение, ему в данном случае достаточно понять, что obj = null и не вычислять дальнейшее
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097237
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79bj != null) || (obj.value = 5)

если поменять местами, будет nullreference (при отсуствии obj)
компилятор не вычисляет всё выражение, ему в данном случае достаточно понять, что obj = null и не вычислять дальнейшее

Именно. Семантика && и || задана в описании языка. От компилятора никак не зависит
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097244
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erвыход из внутренного цикла должен быть именно таким. break. не годится. делать доп условие if - можно , но вредно.
Гавнокодище, конечно, редкостный. Во-первых, почему break не годится? Во-вторых, чем не устроил if? Видишь, ты сам уже знаешь ответ - как структурировать этот мусор. Причем твой метод превратится в нормальное удобоваримое чтиво. То, что мы видим сейчас - редкостное дерьмо, которое даже отрефаторить не представляется возможным. Глаза лезут на лоб от такого кода, хотя метод не большой.
Вот и думай, что лучше, декомпозировать эту лапшу на составляющие, с линейным алгоритмом, или убивать себя об стену. Так это у тебя еще метод простецкий. Прикинь метод, который раз в 20-30 больше твоего, это же страх
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097245
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилИменно. Семантика && и || задана в описании языка. От компилятора никак не зависит

Я вот пришел в свое время с делфей. Там при компиляции в настройках среды имеется галочка "вычислять полностью выражение" (не по умолчанию, правда).
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097250
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Набор входных параметов, конечно, впечатляет

int[,] matrix, int HAMILTON_CONTUR, ref int GLOBAL_MIN, int LEV, int Qi, List<int> TT, int left_tt, StreamWriter sw, string ss, int level, int Low, int Hi, int tt_level

Всё в кучу, и int[,] тебе, и какие-то ref'ы, и List, и StreamWriter даже затесался. Это полный пецдец

Друх, тут проблема не в гото, тут проблемы с головой Без обид.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097272
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

Так будет демонстрация множественного наследования в .Net или нет?!
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097282
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что с Алексеем?
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097305
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНабор входных параметов, конечно, впечатляет
Друх, тут проблема не в гото, тут проблемы с головой Без обид.

Глаза лезут на лоб от такого кода, хотя метод не большой.
ну так это же отладочная реализация алгоритма там много чего лишнего. ( куда делся последыш не знаю, за годы оно исчезло).

без этого говнокода неполучилось бы вылепить конфетку.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097315
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erбез этого говнокода неполучилось бы вылепить конфетку.
Тогда я не понимаю, зачем ты вообще его запостил? :) Говнокод ничего не доказывает, кроме как принадлежность к гавнокоду.
Показывай нормальный пример с goto.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097327
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТогда я не понимаю, зачем ты вообще его запостил? :) Говнокод ничего не доказывает, кроме как принадлежность к гавнокоду.
Показывай нормальный пример с goto.
ещё раз повторю, что без говнокода не получилось бы результата. говнокод на то и нужен , что бы найти правильный и конечный результат. и именно в нём готу был очень нужен. и не смотря на то , что в финальный релиз он не вошёл , goto сделал много для этого метода.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097337
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

нафиг там гото не нужен был
ты просто не знал что пишешь, потому первый "работающий" вариант тебя устроил
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097362
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тот, кто не умеет правильно использовать GOTO - не достоин звания Программиста
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097385
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Тот, кто не умеет правильно использовать GOTO - не достоин звания Программиста
значит без звания будет говнокодить программировать
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097395
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Тот, кто не умеет правильно использовать GOTO - не достоин звания Программиста
В Кобол имелся оператор ALTER, который переназачал GOTO.
Я как то обрадовавшись такой возможности написал очень красивую прогу :)(сделали тут же старшим инженером -матаематиком- программистом) месяц потом разбирались.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097396
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Тот, кто не умеет правильно использовать GOTO - не достоин звания ПрограммистаЯ, скажем, и не претендую. :) Буду так, без звания.
И вообще, лучшее - враг хорошему.
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097419
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
YUBACat2Тот, кто не умеет правильно использовать GOTO - не достоин звания ПрограммистаЯ, скажем, и не претендую. :) Буду так, без звания.
И вообще, лучшее - враг хорошему.
Ну и молодец. Я тоже так думаю. Это только МСУ постоянно борется за звание "Лучший по профессии".
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097432
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2YUBAпропущено...
Я, скажем, и не претендую. :) Буду так, без звания.
И вообще, лучшее - враг хорошему.
Ну и молодец. Я тоже так думаю. Это только МСУ постоянно борется за звание "Лучший по профессии".
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097439
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ну и молодец. Я тоже так думаю. Это только МСУ постоянно борется за звание "Лучший по профессии".Если шо, у него и спросим, как надо. :)
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097458
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

фортрановский вычисляемый GOTO - он тож ничё
...
Рейтинг: 0 / 0
этот страшный ужасный GoTo
    #38097459
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗа такую "архитектуру" нужно выпроваживать в зал расстрела...
А за goto - расстреливать на месте. Кто проживет дольше? ))
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 3 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / этот страшный ужасный GoTo
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]