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

      Ок, в последний раз. Во фразе говорится об одном из критериев, соответствие коду которому говорит о том, что код стоит вынести в отдельный метод. Об одном из. Это не значит, что не существуют других критериев, и, как следствие - не значит, что большой код, написанный один раз, я разбивать не буду.
        Цитата KILLER @
        Цитата OpenGL @
        У Qraizer-а получилось.

        Тот пример выглядит ужасно.

        Что за пример-то? Я пропустил, видимо.
          Цитата D_KEY @
          Что за пример-то? Я пропустил, видимо.

          Почему go to считается плохим тоном?
            Цитата Qraizer @
            Та неважно, что. И не надо ничего писать, разве что проиллюстрировать идею, например. Как в архитектуру заложить сохранение/восстановление состояний? В конце-концов любая нормальная игра это умеет. Но вот как сие реализовать в своём приложении?

            Это любопытно, но при чем тут goto? :D

            Добавлено
            Цитата KILLER @
            Цитата D_KEY @
            Что за пример-то? Я пропустил, видимо.

            Почему go to считается плохим тоном?

            Забавно :)
              рискну предположить, что тройной for можно заменить while с ручным инкрементом - необходимость в гоуту отпадёт :rolleyes:
                Да там вообще просто переделать инициализацию i,j,k и все. То, что с goto читабельнее - вопрос спорный ;)
                  ExpandedWrap disabled
                    int i = j = k = 0;
                    restorePrevious(&i, &j, &k);
                     
                    while(i<10)
                    {
                     while(j<10)
                     {
                      while(k<10)
                      {
                       k++;
                      }
                      j++; k = j;
                     }
                     i++; j = i; k = j;
                    }

                  оно?
                    _lcf_, тут еще вопрос с масштабированием. Решение Qraizer'а позволяет сохранять много всякой херни, загружать много всякой херни и работать дальше. Как бы в твоем случае мы будем чуть ли не с каждой переменной вручную разбираться.
                      ExpandedWrap disabled
                        for (int i = isInit ? initValue : 0; i < 10; i++)
                         for (int j = isInit ? initValue : i; j < 10; j++)
                          for (int k = isInit ? initValue : j; k < 10; k++)

                      компилятор сиё оптимизирует?
                        У них разные initValue :)
                        По поводу оптимизации - надо мерить.

                        Добавлено
                        Пока получается что-то вроде того:
                        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 понятнее... Хотя второй тоже неплох, на мой взгляд.
                          Цитата D_KEY @
                          _lcf_, тут еще вопрос с масштабированием. Решение Qraizer'а позволяет сохранять много всякой херни, загружать много всякой херни и работать дальше. Как бы в твоем случае мы будем чуть ли не с каждой переменной вручную разбираться.

                          Э-м… Так там же тоже с каждой переменной вручную разбираются:
                          ExpandedWrap disabled
                              ok = ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount()==sizeof(i);
                              ok = ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount()==sizeof(j);
                              ok = ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount()==sizeof(k);
                            // ...
                                 ok = ok && outFile.write(reinterpret_cast<char*>(&i), sizeof(i)).good();
                                 ok = ok && outFile.write(reinterpret_cast<char*>(&j), sizeof(j)).good();
                                 ok = ok && outFile.write(reinterpret_cast<char*>(&k), sizeof(k)).good();
                            Цитата korvin @
                            Цитата D_KEY @
                            _lcf_, тут еще вопрос с масштабированием. Решение Qraizer'а позволяет сохранять много всякой херни, загружать много всякой херни и работать дальше. Как бы в твоем случае мы будем чуть ли не с каждой переменной вручную разбираться.

                            Э-м… Так там же тоже с каждой переменной вручную разбираются:
                            ExpandedWrap disabled
                                ok = ok && inFile.read(reinterpret_cast<char*>(&i), sizeof(i)).gcount()==sizeof(i);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&j), sizeof(j)).gcount()==sizeof(j);
                                ok = ok && inFile.read(reinterpret_cast<char*>(&k), sizeof(k)).gcount()==sizeof(k);
                              // ...
                                   ok = ok && outFile.write(reinterpret_cast<char*>(&i), sizeof(i)).good();
                                   ok = ok && outFile.write(reinterpret_cast<char*>(&j), sizeof(j)).good();
                                   ok = ok && outFile.write(reinterpret_cast<char*>(&k), sizeof(k)).good();

                            Ну это только в плане сохранения/загрузки. А так тебе придется еще в логике учитывать. В данном случае - по особому работать со счетчиками циклов.
                              Цитата D_KEY @
                              Мне кажется, что вариант с goto понятнее...

                              O_O'

                              Чем он понятней? Только тем, что там выход из трёх циклов? Ну так достаточно весь этот код вынести из main в отдельную процедуру и использовать return. В goto-версии циклы начинаются с нуля. Если вдруг при чтении файла что-то пойдёт не так и загрузятся неправильные значения счётчиков (ниже нуля), то получим баг.

                              Добавлено
                              Цитата D_KEY @
                              Ну это только в плане сохранения/загрузки. А так тебе придется еще в логике учитывать. В данном случае - по особому работать со счетчиками циклов.

                              При чтении их инициализирующих значений извне, с ними нужно по-особому работать. Чтобы это было явно отражено в коде.
                                Есть еще вариант со switch :D
                                Не проверял, мог опечататься

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


                                Вряд ли кто-то скажет, что он понятнее варианта с goto :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 12 13 [14] 15 16 ...  31 32


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0522 ]   [ 15 queries used ]   [ Generated: 26.04.24, 04:28 GMT ]