Кресты / Говнокод #3732 Ссылка на оригинал

0

  1. 1
map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > > m;

великолепно потом пробегать по коллекции

Запостил: MAK MAK, (Updated )

Комментарии (13) RSS

    • Да даже с typedef выглядело бы страшно и неудобно. Он только несколько сократил бы строку. Такую конструкцию можно было аккуратно разложить и без синонимов.
      А вообще да, там много чего не знакомо, судя по всему. По всему классу разбросаны гигантские итераторы.
      Ответить
        • map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > >::iterator it;
          map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > >::iterator jt;
          set<pair<pair<int,int> > >::iterator iter;

          ну и т.п.
          Ответить
      • Прослеживаем эволюцию :
        typedef pair<int,int> IntPair;
        typedef pair<IntPair, IntPair> IntPairDuo;
        typedef pair<IntPair, int> IntPairInt;
        typedef map<IntPairInt, vector<IntPairDuo> > MegaMap;
        
        map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > > m;
        map<pair<IntPair, int>, vector<pair<IntPair, IntPair> > > m;
        map<IntPairInt, vector<IntPairDuo> > m;
        MegaMap m;

        Пусть такие вложенности и изврат, который надо передизайнить.
        Но даже в таком случаем typedef помогает не запутаться во всём этом.
        И даже итераторы не будут такие сумасшедшие:
        MegaMap::iterator it;
        Ответить
        • Действительно, лучше сразу определить типы. Во-первых, они могут где-то пригодиться. Во-вторых, так проще избежать ошибок.
          Пихать всюду синтетические конструкции вместо простого названия типа — зло.
          Ответить
        • Да typedef конечно мог бы быть полезен, но просто этот пример был выбран как самый показательный. Редизайн в любом случае необходим
          Ответить
  • Обезьяна с гранатой, да не в обиду будет сказано. А это же потом кому-то читать возможно придется.
    Ответить
  • OMG!!! И для каких же целей нужна такая переменная?
    Ответить
    • Что-то вроде списка ссылок на атрибуты, связанные с объектом отчета (первая пара пар). Что характерно вокруг по коду корявые, но более или менее говорящие названия object_parent, data_column_attributes, row_indicator. А тут m, вроде "и так же все понятно".
      Ответить
  • Чуваг не знал, что есть boost::tuple. И вообще такая обезбашенность говорит о корявом проектировании.
    Ответить
    • Кортеж тут ничем не поможет. С таким подходом как у автора ГК будет что-то вроде:
      std::map<boost::tuple<std::pair<std::pair<int,int>, int>>, std::vector<boost::tuple<pair<pair<int,int>, pair<int,int> > > > > m;

      То бишь, ещё больший 3.14здец.
      Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8