На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (77) « Первая ... 68 69 [70] 71 72 ...  76 77  ( Перейти к последнему сообщению )  
> Текущий Стандарт С++ и перспективы его развития
    Цитата KILLER @
    Цитата D_KEY @
    То, что его можно забыть. И при этом он нужен в большинстве типовых случаев.

    Так а зачем? В чем его идиотство заключается? )

    Я же говорю - его можно забыть. И подобные ошибки не так просто искать в сложных случаях. И заметь, все это на ровном месте - конструкция ведь элементарная.
      Цитата D_KEY @
      Я же говорю - его можно забыть. И подобные ошибки не так просто искать в сложных случаях.

      В смысле отсуствие брейка ? Ну если конструкция сложная -тогда да, но ведь на это есть форматирование.

      Цитата D_KEY @
      И заметь, все это на ровном месте - конструкция ведь элементарная.

      Ну в основном современные IDE даже генерят case вместе с break, если не генерят, тогда да - можно по затупке пропустить сей момент, но вот например точка с запятой ( ; ) после описания класса в хидере - как по мне более весомый косяк, чем тот же break. Причем я реально ловился на этом, и тратил несколько дней на поиск ошибки компиляции, ибо компилятору видимо башню сносит напрочь при отсуствии ; после объявления класса, особенно при наличии сложного наследования.

      Добавлено
      Блин смайл встроился, там - ; в скобках предполагалась, вместо смайла. (Я поправил ;) - Q)
      Сообщение отредактировано: Qraizer -
        Предлагалось вместо break для большинства случаев ставить continue для меньшинства. Как бы почему бы и нет. Но с моей точки зрения это менее интуитивно, т.к. case-ы в switch() это всего лишь метки перехода, а не структурные единицы, поэтому использование break более логично для прерывания последовательности, чем continue для отсутствия прерывания. Ведь отсутствие прерывания последовательности как бы само собой подразумевается по дефолту.
          Цитата KILLER @
          Так а зачем? В чем его идиотство заключается? )

          В том, что он нужен почти всегда. Ведь куда менее удобно ставить почти всегда break, чем почти всегда не ставить continue. Вон korvin на прошлой странице пример из go приводил - вполне удобно же.
            Цитата OpenGL @
            В том, что он нужен почти всегда. Ведь куда менее удобно ставить почти всегда break, чем почти всегда не ставить continue. Вон korvin на прошлой странице пример из go приводил - вполне удобно же.

            Кстати, какой-то break при таком раскладе так же нужен. Ведь мы должны иметь возможность после continue остановиться не только в конце... Или continue/fallthrough только на один case должен опускаться?
              Цитата D_KEY @
              Ведь мы должны иметь возможность после continue остановиться не только в конце

              Не понял, о чём ты.
              Цитата D_KEY @
              Или continue/fallthrough только на один case должен опускаться?

              Да, говоря о continue, я имел ввиду именно это :) А в go разве не так?
                Цитата OpenGL @
                В том, что он нужен почти всегда. Ведь куда менее удобно ставить почти всегда break, чем почти всегда не ставить continue.

                Ну незнаю. Может я просто привык к такой конструкции, но с break мне кажется всетаки логичней.
                  Цитата OpenGL @
                  Цитата D_KEY @
                  Или continue/fallthrough только на один case должен опускаться?

                  Да, говоря о continue, я имел ввиду именно это :) А в go разве не так?

                  Судя по докам - так. Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис.

                  Если в C++ когда-нибудь появится какой-то match для паттерн-матчинга(в каком-то виде), то ситуация будет лучше - старый switch останется для совместимости и трюков, а в обычных случаях можно будет юзать match.
                  Сообщение отредактировано: D_KEY -
                    Цитата D_KEY @
                    Судя по докам - так. Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис.

                    В смысле? Чтобы
                    ExpandedWrap disabled
                      case 1:
                      case 2:
                      case 3:
                          foo();

                    обрабатывались очевидным образом? Можно сделать, чтобы при отсутствии операторов внутри одного case автоматически переходило к следующему, как в шарпе.
                      Цитата OpenGL @
                      Цитата D_KEY @
                      Судя по докам - так. Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис.

                      В смысле? Чтобы
                      ExpandedWrap disabled
                        case 1:
                        case 2:
                        case 3:
                            foo();

                      обрабатывались очевидным образом? Можно сделать, чтобы при отсутствии операторов внутри одного case автоматически переходило к следующему

                      Ну так это и есть отдельный механизм. И не очень логичный, ИМХО.
                        Сейчас будут набигать эксперты и говорить что это все говно, но мне нравится подход D:
                        ExpandedWrap disabled
                          int number;
                          string message;
                          switch (number)
                          {
                              default:    // валидно: заканчивается 'throw'
                                  throw new Exception("unknown number");
                           
                              case 3:     // валидно: заканчивается 'break' (выходит из 'switch')
                                  message ~= "three ";
                                  break;
                           
                              case 4:     // валидно: заканчивается 'continue' (продолжает внешний цикл)
                                  message ~= "four ";
                                  continue;
                           
                              case 5:     // валидно: заканчивается 'goto case' (явный переход к следующему case.)
                                  message ~= "five ";
                                  goto case;
                           
                              case 6:     // ошибка компиляции: неявный, потенциально ошибочный переход к следующему case
                                  message ~= "six ";
                           
                              case 1:     // валидно: пустой блок
                              case 2:     // валидно: последний case в switch.
                                  message = "one or two";
                          }
                        Сообщение отредактировано: applegame -
                          Цитата applegame @
                          Сейчас будут набигать эксперты и говорить что это все г...
                          Это и не экспертами сразу видно. Подтверждаю, УГ. :yes:
                            Цитата Славян @
                            Это и не экспертами сразу видно. Подтверждаю, УГ. :yes:
                            Таки ты игсперд!
                              Цитата D_KEY @
                              Кстати, какой-то break при таком раскладе так же нужен. Ведь мы должны иметь возможность после continue остановиться не только в конце... Или continue/fallthrough только на один case должен опускаться?

                              Кстати break в Go позволяет выйти не только из for, но и из switch и select.

                              ExpandedWrap disabled
                                switch foo {
                                case 1:
                                    doWhen1()
                                    fallthrough
                                case 2:
                                    doWhen1or2()
                                    break
                                case 3:
                                    ...
                                }


                              Добавлено
                              Цитата D_KEY @
                              Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис.

                              Зачем отдельный? Просто вставляешь еще один fallthrough. Полотна свичей все равно не нужны. =)

                              Добавлено
                              Цитата D_KEY @
                              Ну так это и есть отдельный механизм. И не очень логичный, ИМХО.

                              А так?
                                все эти неудобства в С++ специально сделаны, чтобы отучить С программистов от switch :ph34r:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (77) « Первая ... 68 69 [70] 71 72 ...  76 77


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1020 ]   [ 16 queries used ]   [ Generated: 27.04.24, 17:16 GMT ]