1. C++ / Говнокод #2795

    +63.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    bool FindActualQtyOfWeightedReceptacle
                                     (      std::map<double,double> &ReceptacleWeighings,
                                      const double                   ReceptacleId,
                                            double                  &Weight)
    {
       Weight          = 0.0;
       bool recepFound = false;
       
       for (std::map<double,double>::iterator iter  = ReceptacleWeighings.begin();
                                              iter != ReceptacleWeighings.end() && !recepFound;
                                              iter++)
       {  if (iter->first == ReceptacleId)
          {  recepFound = true;
             Weight     = iter->second;
          }
       }
    
       return(recepFound);
    }

    Во Франции одного ведущего (!) С++ программиста с ироничной фамилией Паскаль попросили таки ознакомиться со стандартными контейнерами из библиотеки STL. В частности с std::map. В итоге из-под палки он выдал вот такой "код". Возникает как минимум два вопроса:
    1. производительность?
    2. и зачем так многа букаф?

    Пардон, Жан-Люк, не обижайся. Наговнокодил...

    Запостил: azabluda, 15 Марта 2010

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

    • Senior девелоперы бывают и такими и это грустно
      Ответить
    • Меня больше всего умиляет, что для ID используется double. Если это его осознанное решение - к коду его больше пускать нельзя. Дать в руки Эксель и Визио, и пусть принимает великие архитектурные решения (кстати, все будут довольны).
      Ответить
      • насчет double ID... Боюсь это было решение было принято задолго до него. Так что, неверно не стану приписывать этот грешок a cher ami.
        Ответить
      • +1. На@#$%утся они с отладкой этого.
        Ответить
    • показать все, что скрытоГде здесь С++?
      Ответить
      • странный вопрос. Ну std::map например.
        Ответить
        • А за что минусуете "azabluda" то?

          Всегда бесило, когда какой-то пост минусуют, а никаких аргументов не предоставят.
          Ответить
      • Мне уже начинает казаться, что некий guest просто пытается побить рекорд по минусовому рейтингу, и для этого постоянно повторяет этот вопрос везде где это только можно и нельзя.
        Ответить
      • xaionaro озвучил мнение многих, и моё в том числе. Вопрос действительно повторяется кучу раз на сайте и зачастую совсем не к месту. Возможно даже это бот. Надеюсь достаточный аргумент?

        ps: и честно говоря, все равно не вижу смысла "беситься" по поводу минусов...
        Ответить
    • > Во Франции одного ведущего (!) С++ программиста с ироничной фамилией Паскаль

      Проклятие Паскаля
      Ответить
    • Так тщательно написано. Пока до тела цикла не дочитал я думал, что это не говнокод и собирался минусовать.
      Ответить
      • ага, тщательно написанный говнокод :0)
        Ответить
      • А чё ReceptacleWeighings не map const&, зато ReceptacleId - const double?
        Ответить
    • Где здесь Паскаль?
      Ответить
    • Помимо контейнеров еще бы и алгоримы изучали, так нет ведь, все велосипеды изобретают.
      Ответить
      • В данном случае алгоритмы не нужны. Хватит и map::find().
        Ответить
        • Ничего что числа double нельзя сравнивать на == ?
          Ответить
          • А хорошо бы по этому утвержению ссылочку на стандарт?

            Весьма верю, что после сложной операции с double, в значение могут закрасться "младшие биты", и тогда например
            myDouble != sqrt(myDouble)*sqrt(myDouble)
            В данной проге, судя по всему, сравниваются только ID, над которыми ни один даже самый отчаяный паскалист не станет так извращаться. Тобишь единственно, что с ними могло происходить, это серия присвоений. Или у тебя есть основания полагать, что результат не гарантирован даже в этом случае? В любом случае ссылка не помешает.
            Ответить
          • Так и есть. Тут ссылка на стандарт FPU.
            Ответить
            • сорри, брат, не вижу ссылки. Может сайт вырезает?
              Ответить
          • Только find для поиска использует operator<, так что это не страшно.
            Ответить
            • дык если биты похерились, то find тогда тоже не найдет
              Ответить
              • к чему этот спор, если автор всё равно ищет сравнением...
                Ответить
    • >> 2. и зачем так многа букаф?
      он же француз, они любят многабукаф. Ты просто половину букофф не читай и всё сразу станет нормально ))
      Ответить
    • оллоолоо!
      выучил чувак STL. первая double определена как const ибо у map ключ const.

      по поводу ==. map и set юзают понятие эквивалетности. иными словами должно быть

      if((! (iter->first < ReceptacleId) && ! (ReceptacleId < iter->first) )
      бла-бла;

      а вообще чувак жжот. нахрена он хранит Weight если ему нужно лишь выяснить наличие или отсутствие данного ID в map?
      Ответить
      • Из данного говнокода однозначно видно, что чувак не только ищет i->first и возвращает i->second через переменную Weight.
        Ответить
        • внатуре! хитер француз!
          не обратил внимание на ссылку
          Ответить

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