На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (32) « Первая ... 16 17 [18] 19 20 ...  31 32  ( Перейти к последнему сообщению )  
> goto vs break & continue , Кроха-сын пришел к отцу и спросила кроха: "goto - это хорошо?"
    Цитата Serafim @
    Например вот это приводилось в пример: goto vs break & continue (сообщение #3188868)
    Это ради того, чтобы не выносить метку в отдельную функцию или на худой конец замыкание, т.е. ни разу не оправдание сего пагубного поступка, а ведь ещё г-н Макконнел говорил....
    В плюсах тогда не было лямбд с замыканиями, а выносить в отдельную функцию плохо, так как нет доступа к локальным переменным. Короче FUUUUUUUUUUUUUUU!
      Цитата Serafim @
      тем более любой алгоритм можно без goto реализовать, более чище и понятнее, чем с ним.

      В этой теме уже приводился алгоритм, который без goto менее нагляден :)
        Serafim, ты пример Qraizer'а видел? Покажи его вариант, который был бы лучше варианта с goto. Там не выход из циклов, там вход :)
        Вот небольшое резюме разных вариантов:
        Цитата D_KEY @
        Пока получается что-то вроде того:
        ExpandedWrap disabled
          int i = 0, j = 0, k = 0;
          if (restore(&i, &j, &k))
              goto resume;
           
          for(i = 0; i < 10; ++i) {
            for (j = i; j < 10; ++j) {
              for(k = j; k < 10; ++k) {
          resume:
               // ...
           
              }
            }
          }


        vs

        ExpandedWrap disabled
          int i = 0, j = 0, k = 0;
          restore(&i, &j, &k);
           
          for(; i < 10; ++i, j = i, k = j) {
            for (; j < 10; ++j, k = j) {
              for(; k < 10; ++k) {
           
                // ...
           
              }
            }
          }


        vs

        ExpandedWrap disabled
          int init_i = 0, init_j = 0, init_k = 0;
          bool is_init = restore(&init_i, &init_j, &init_k);
           
          for(int i = is_init ? init_i : 0; i < 10; ++i) {
            for (int j = is_init ? init_j : i; j < 10; ++j) {
              for(int k = is_init ? init_k : j; k < 10; ++k) {
           
                // ...
           
              }
            }
          }


        Мне кажется, что вариант с goto понятнее... Хотя второй тоже неплох, на мой взгляд.
          Цитата OpenGL @
          В этой теме уже приводился алгоритм, который без goto менее нагляден

          акстись, тут 18 страниц

          Добавлено
          Цитата applegame @
          В плюсах тогда не было лямбд с замыканиями, а выносить в отдельную функцию плохо, так как нет доступа к локальным переменным. Короче FUUUUUUUUUUUUUUU!

          передать в качестве аргументов не позволяет религия?

          Добавлено
          как бы protected\private методы и существуют для того, чтоб не превращать методы в километровый склад кода

          Добавлено
          Цитата D_KEY @
          Покажи его вариант, который был бы лучше варианта с goto

          мне все три варианта понятны, ибо смысла в них нет, достаточно одного цикла от 0 до 10 * 10 * 10

          Добавлено
          Не, не 10*10*10, там стоит инициализация не только нулём. Всё равно один фиг, проще было бы одним циклом



          фигню несу :whistle:
          Сообщение отредактировано: Serafim -
            Цитата Serafim @
            PHP Fatal error: 'goto' into loop or switch statement is disallowed
            :lool: Так вам и надо, лузеры! :good:
              во, теперь точно рабочий вариант на корутинах и лямбдах:
              deleted

              Добавлено
              или не, блин, опять фейл

              Добавлено
              щаща, подождите, я докажу, что goto зло
              Сообщение отредактировано: Serafim -
                Цитата Serafim @
                подождите, я докажу, что goto зло
                Доказательства бывают только в математике, а в программирование внесён огромный пласт культуры=искусства, посему у вас не получится. :D Но всё же подождём! ;)
                  у меня лучше второго варианта не получается =(
                    По моему, второй вариант и так лучше. Наглядность не страдает, а строк кода даже меньше.
                      Лучше с goto, потому что пишется за три секунды и работает без отладки. При этом прекрасно понятен. Что ещё нужно-то?
                        Не вижу принципиальной разницы со вторым вариантом. Почему его дольше отлаживать или писать? Принцип-то один и тот же. Третий - да, смотрится страшновато, но имхо, он просто неудачный вариант второго.

                        Не являюсь фанатичным противником goto, если что. Просто как-то так получается, что он и не пригождается. Разве что в генерённом коде может быть полезно. И приведённый пример совсем не убеждает, но подозреваю, что во мнении мы не сойдёмся. :D
                        Кстати, в расте goto нет (именованные break/continue имеются).
                          Допускаю такую канитель, хоть самому никогда и не попадалось такое писать:
                          ExpandedWrap disabled
                            int myFunc(...)
                            {
                                int i,j=-1,k;
                                // ещё вагоны переменных
                                float p,q,r;
                                // тело ниже:
                                for( i=0; i<10; i++)
                                {
                                  ...
                                  if( A ) // вызов длинной и сложной функции
                                  {
                                    goto Label_ФункцияЯкобы;
                                   Label_Возврат1:;
                                  }
                                }
                                ... // правка вагона переменных
                                for( j=0; j<100; j++)
                                {
                                  ...
                                  if( B ) // вызов длинной и сложной функции
                                  {
                                    goto Label_ФункцияЯкобы;
                                   Label_Возврат2:;
                                  }
                                }
                                ... // правка2 вагона переменных
                                return 0;
                              Label_ФункцияЯкобы:
                                ... // сложный кусок, очень нуждающийся в вагоне переменных из этой функции
                                if( j<0 ) goto Label_Возврат1;
                                goto Label_Возврат2;
                            }
                            А я на практике этот код рожал, DarkEld3r. Пока допёр до структурного варианта, прошло три итерации правки сырцов и отладки. Вопрос: ну и нахрена было? И это я ещё не спрашиваю о стоимости структурного решения в единицах производительности по сравнению с goto. Предполагается-то ведь, что прерывание исполнения и сохранение состояние с последующим восстановлением состояния и продолжением исполнения суть очень редкая операция. Зачем делать лишние движения на каждой итерации ради исчезающе малого процента ситуаций, их обосновывающих?
                            Ну нет, Славян, вот как раз это я бы перепроектировал, тут с передачами управления полная ахинея.
                              Цитата Qraizer @
                              вот как раз это я бы перепроектировал, тут с передачами управления полная ахинея.
                              А мне показалось, что всё довольно прозрачно. :yes-sad:
                                Когда написано, да. :D
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 16 17 [18] 19 20 ...  31 32


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0565 ]   [ 15 queries used ]   [ Generated: 7.05.24, 08:07 GMT ]